变量作用域

数据流向 父->子

子函数可以引用外部变量



变量查找 子->父

当搜索一个变量时先从当前区域进行查找,再从上一级区域查找,找到则终止。



同名变量作用域

同名变量作用域互相独立不受影响,独立存在与所在区域有效

'use strict';

function foo() {
    var x = 1;
    x = x + 1;
}

function bar() {
    var x = 'A';
    x = x + 'B';
}


变量提升

在执行函数时,会先搜索所有存在的变量名(但不会对变量赋值),再顺序执行语句。

console.log(a); // undefined 表示存在a但无值
var a=10;

// 等同于
var a;
console.log(a);
a = 10;

// 正确写法,变量提前
var a=10;
console.log(a);


命名空间

全局变量污染

function alert() {
    return 1;
}

alert("这就是全局变量污染") // 1

减少全局变量污染的最好方法是命名一个对象,将自定义变量全作为他的属性。很多知名js框架都是采用该方法

// 唯一的全局变量MYAPP:
var MYAPP = {};

// 其他变量:
MYAPP.name = 'myapp';
MYAPP.version = 1.0;

// 其他函数:
MYAPP.foo = function () {
    return 'foo';
};


块级作用域

我们知道js变量只能在当前作用域内使用,该作用域所指的是当前函数作用区域

function aa(){
    for(var i=1; i<100; i++ ){
        ...
    }
    i+=1; // i可以使用,为101
}

在es6中采用let来明确指代块级作用域

function aa(){
    for(let i=1; i<100; i++ ){
        ...
    }
    i+=1; // SyntaxError:
}


Const

constlet一样都是块级作用域,const指代于常量,let指代于变量

posted @ 2018-03-25 18:49  Kaso基佬康  阅读(101)  评论(0编辑  收藏  举报