js 作用域

js的作用域和py相似,if while等控制语句并没有自己作用域;而函数是有自己的作用域的;

<body>
<script>
    if(1==true){
        var s = 8;
    }
    console.log(s);

    function f(){
        var s2 = 6;
    }
    console.log(s2);        // Uncaught ReferenceError: s2 is not defined
</script>
</body>

嵌套函数的作用域:

var city = 'guangzhou';
function func(){
    var city = 'foshan';
    function inner(){
        var city = 'huizhou';
        console.log(city);
    }
    inner();
}
func();

# 运行结果:
huizhou
var city = 'guangzhou';
function Bar(){
    console.log(city);
}

function func(){
    var city = 'foshan';
    return Bar;
}
var ret = func();
ret();

# 运行结果:
guangzhou

# 解释:var city = 'foshan'; 只在 func() 函数中生效,func() 函数返回了一个 Bar 函数指针,在 Bar() 函数中,city 在本地函数中找不到定义,向上一级寻找
for (var i=1; i<=9; i++){
    setTimeout( function timer(){
        console.log(i);
    }, 1000);
}

运行结果:

posted @ 2019-02-15 10:05  klvchen  阅读(216)  评论(0编辑  收藏  举报