blog icon indicating copy to clipboard operation
blog copied to clipboard

JavaScript 基础练习题讲解——日常随笔

Open wuweijia opened this issue 6 years ago • 3 comments

NO.1

function Foo(){
     var i=0;
     return function(){
         document.write(i++);
     }
}
var f1=Foo(),
f2=Foo();
f1();
f1();
f2();
``

请问以上程序的输出

wuweijia avatar Dec 04 '18 09:12 wuweijia

这是一个闭包,闭包它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 这里的局部变量i,对f1()来说是全局变量,对f2()来说也是全局变量,但是f1()的i跟f2()的i又是相互独立相互不可见的,f1()每执行一次,f1()的i就加一,f2()每次执行一次,f2()的i就加油,但是相互之间不影响,因此结果是010

wuweijia avatar Dec 05 '18 01:12 wuweijia

NO.2

var obj ={a:1,b:function () {alert(this.a)}}; 
var fun =obj.b; 
fun();

wuweijia avatar Dec 05 '18 01:12 wuweijia

this的行为有时候会显得极其诡异,让人感到困惑,但只需要记住 this的值要等到代码真正执行时才能确定 同时this的值具体有以下几种情况:

new 调用时指的是被构造的对象

call、apply调用,指向我们指定的对象

对象调用,如执行obj.b(),this指向obj

默认的,指向全局变量window(相当于执行window.fun())

这样看来,当你执行fun()的时候,以上1,2点均不满足。 第3点,因为this是运行时确定的,而我们执行fun(),等同于windown.fun()(与obj没有任何关系),自然的this指向window,而window没有定义变量a,结果是undefined。

wuweijia avatar Dec 05 '18 01:12 wuweijia