JavaScript -- 作用域

(function() {
    // let i = 0; // 函数作用域 1
    // for (let i = 0; i < 4; i++){ // 块级作用域 2
    // for (var i = 0; i < 4; i++){ // 函数作用域 存在变量提升,不管var 变量定义在函数的哪个位置,都会被提升到函数最上面 3
    for (i = 0; i < 4; i++){ // 全局作用域 1 4
        console.log('块i', i) // 1 2 3 4 每种情况都会正常执行
    }
    console.log('函数i', i); // 1 3 情况会正常执行
})();
console.log('全局i', i); // 4 情况会正常执行

@、嵌套函数中的 this

var obj = {
    myname: 'obj',
    outFunc: function() {
        self = this;
        console.log(self.myname); // obj
        function innerFunc() {
            console.log(this.myname); // undefined  这里的this指向的是window
            console.log(this); // Window
            console.log(self.myname); // obj
        }
        innerFunc();
    }
}
console.log(obj.myname); // obj
obj.outFunc();
原文地址:https://www.cnblogs.com/yarightok/p/15484332.html