Javascript学习笔记--变量作用域和结构赋值

本文用于自我学习,查漏补缺
变量

1.javascript默认了一个全局对象
如果没有定义,就默认为全局变量

var a = "123"
alert(a)//123
alert(window.a)//123
window.alert(a)//123

2.全局命名空间问题,为了避免或减小全局变量的命名冲突,可以把所有变量绑定到一个变量中(jquery就是这么做的)

var MYCONST = {}
MYCONST.a = "123"
MYCONST.b = "haha"
MYCONST.fun = function(){
  return "我是一个function"
}

3.在for循环中var是不能声明块级作用域变量的,但是let可以

'use strict';

function foo() {
    for (var i=0; i<100; i++) {
        //
    }
    i += 100; // 仍然可以引用变量i
}

function foo1() {
    var sum = 0;
    for (let i=0; i<100; i++) {
        sum += i;
    }
    // SyntaxError:
    i += 1;
}
解构赋值

ES6新语法(可以理解为同时对一组变量进行赋值)
下面列出几种解构场景

//1.
var [x, y, z] = ['hello', 'JavaScript', 'ES6'];
//x = hello, y = JavaScript, z = ES6

//2.
let [x, [y, z]] = ['hello', ['JavaScript', 'ES6']];
//x = hello, y = JavaScript, z = ES6

//3.
let [, , z] = ['hello', 'JavaScript', 'ES6']; // 忽略前两个元素,只对z赋值第三个元素
//z = 'ES6'

//4.对对象进行解构赋值
var person = {
    name: '小明',
    age: 20,
    gender: 'male',
    passport: 'G-12345678',
    school: 'No.4 middle school'
};
var {name, age, passport} = person;
//name = 小明,age = 20, passport = G-12345678

//5.对嵌套对象进行解构赋值(!!注意这里的address不是变量)
var person = {
    name: '小明',
    age: 20,
    gender: 'male',
    passport: 'G-12345678',
    school: 'No.4 middle school',
    address: {
        city: 'Beijing',
        street: 'No.1 Road',
        zipcode: '100001'
    }
};
var {name, address: {city, zip}} = person;
name; // '小明'
city; // 'Beijing'
zip; // undefined, 因为属性名是zipcode而不是zip
// 注意!!!!!: address不是变量,而是为了让city和zip获得嵌套的address对象的属性:
address; // Uncaught ReferenceError: address is not defined

//6.对象结构,变量名和属性名不一致
var person = {
    name: '小明',
    age: 20,
    gender: 'male',
    passport: 'G-12345678',
    school: 'No.4 middle school'
};
// 把passport属性赋值给变量id:
let {name, passport:id} = person;
name; // '小明'
id; // 'G-12345678'
// 注意: passport不是变量,而是为了让变量id获得passport属性:
passport; // Uncaught ReferenceError: passport is not defined

//7.避免返回undefined,可以给变量默认值
var person = {
    name: '小明',
    age: 20,
    gender: 'male',
    passport: 'G-12345678'
};
// 如果person对象没有single属性,默认赋值为true:
var {name, single=true} = person;
name; // '小明'
single; // true

//8.最后注意
//8-1.错误写法
//因为JavaScript引擎把{开头的语句当作了块处理,于是=不再合法
// 声明变量:
var x, y;
// 解构赋值:
{x, y} = { name: '小明', x: 100, y: 200};
// 语法错误: Uncaught SyntaxError: Unexpected token =
//8-2.解决方法,用()括起来
({x, y} = { name: '小明', x: 100, y: 200});

廖雪峰https://www.liaoxuefeng.com/wiki/1022910821149312/1023021187855808

发布了12 篇原创文章 · 获赞 3 · 访问量 173

猜你喜欢

转载自blog.csdn.net/weixin_46592036/article/details/105117775