您的位置:首页 > Web前端 > JavaScript

JavaScript 作用域练习题

2018-03-26 19:17 281 查看
var a = 'global';
function test(){
var a ='local';
return a;
}
console.log(test(true));  // local


JavaScript中没有块级作用域,只有全局和函数作用域

var a = 'global';
function test(){
(function(){
var a = 'local';
})();
return a;
}
console.log(test()); // global


local 作用域在匿名函数中,故返回全局变量global

var a = 'global';
function test(){
{
var a = 'local';
}
return a;
}
console.log(test()); // global


函数中的a作用域在是test函数,故输出global

var a = 'global';
function test(){
console.log(a);
var a = 'local';
return a;
}
console.log(test()); // local
// 等同于
function test(){
var a // undefaned 此时a未赋值
console.log(a);
a = 'local';
return a;
}


JavaScript中会自动把变量声明的语句提升到当前作用域的最前方

var a = 1;
function test(){
a = 10;
return;
var a = 100; // 注意变量提升
}
test();


先执行了函数test,然而函数test中对a值的改变不会影响到全局变量

<!-- 给元素添加循环绑定事件 -->
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>


// 方案1
var lis = document.getElementsByTagName("li");
for(let i in lis){
lis[i].count = i;
lis[i].onclick = function(){
console.log(parseInt(this.count)+1);
}
}
// 方案2 闭包实现
var lis = document.getElementsByTagName("li");
for(let i in lis){
(function(j){
lis[j].onclick = function(){
console.log(parseInt(j)+1)
}
}(i));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: