1.
下面代码的输出结果:
var a="Hello";
function b(){
console.log(a);
}
function c(){
var a="Time"
b();
}
c();//Hello
这个涉及到了js中作用域链的问题,调用函数b(),b里面要输出a变量,而在b这个函数的作用域内没有找到与a相关的信息,那么它就会走出去,看看它的上一级作用域有没有与a相关的信息。
2.
const arr=[10,12];
for(var i=0;i<arr.length;i++)
{
setTimeout(function(){
console.log(arr[i]);
},3000);
}
最终得到的结果:
undefined undefined
再看下面的这个例子:
for(var i=0;i<arr.length;i++)
{
setTimeout(function(){
console.log(i)
},3000);
}
得到的结果为2 2
分析:也就是说,我们在setTimeout执行环境中访问外部的变量i,变量i=2;
3.
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i);
},1000)
}
//输出为5,5,5,5,5
问题:如何修改能使上述代码输出为0,1,2,3,4;
解决方案一:直接将var i=0;修改为let i=0;即可;
方案二:
for(var i=0;i<5;i++){
setTimeout((function(n){
console.log(n);
})(i),1000)
}
4.
var num={
_name:"Tom",
method:function(){
return this._name;
}
}
var showNum=num.method;
console.log(showNum());//输出结果为undefined
console.log(num.method());//输出结果为Tom