JavaScript中的闭包介绍
所谓的闭包应该是指:内部函数读取当前函数以外的变量,即创建时所处的上下文环境。
functionhello(){ varchar="hello,world"; functionprint(){ console.log(char); }; returnprint(); }
需要注意的是这里的print函数引用了外部hello函数的char变量,于是在这里我们能够返回一个
hello,world
而这个功能在某种意义上来说,应该是要归功于作用域。当然了,我们没有办法直接访问char,除非是我们声明这个变量的时候出错了。如
functionhello(){ char="hello,world"; functionprint(){ console.log(char); }; returnprint(); }
仅仅是因为少了个var。
在这里hello变成一个闭包了。闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。
Javscript闭包与this
需要注意的是读取this与arguments时,可能是会出问题的。
functionhello(){ this.char="hello,world"; functionoutput(){ char="I'mnohelloworld"; console.log(this.char); }; returnoutput(); }
当然了这个例子并不够贴切,so,我们需要一个额外的例子来解释这个问题,下面引用一个《Javascript高级程序设计》中的一个例子,来说明这个问题。
varname="Thewindow";
varobject={ name:"MyObject",
getNameFunc:function(){ returnfunction(){ returnthis.name; } } }; object.getNameFunc()()