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);
}
运行结果: