javascript 匿名函数中this为什么是window对象?

JavaScript012

javascript 匿名函数中this为什么是window对象?,第1张

this在面向对象的编程语言里指的是当前对象。

1、在匿名函数中,因为匿名函数不是一个对象,所以在匿名函数内的中的当前对象应该是其父对象,没有自定义的父对象只能是其根对象Window。

2、解释实例如下:

<script type="text/javascript">

window.onload=function(){

alert(this)

}

</script>

结果弹出的应该为window对象,因为此时匿名函数不是对象,只是一个实践处理函数,所以this应该为当前对象即window对象。

本节讲解 3 种原生JS的匿名函数。

匿名函数又叫立即执行函数。

因为是匿名的,所以不能被调用。

因为不能被调用,所以不立即执行的话就没意义了。

因为立即执行,所以在执行完之后就会被销毁。

第一种(常用)

( function(){…} )()

第二种(常用)

( function(){…}() )

第三种(不常用)

~function(){…}()

前两种写法,返回值都是正常的。

第三种写法的返回值会比较奇怪,所以很少用。

第一种写法

在控制台输出 1

第二种写法

在控制台输出 2

第三种写法

在控制台输出 -4

在控制台输出2

假设第三种写法的返回值是未知数 x。

则得到的返回值是:-(x + 1)

它可以解释成为“匿名函数自调用”,也就是说,定义一个匿名函数,然后马上调用它(因为它是匿名的,如果不立即调用就获取不到该函数的引用了)。通常它被应用在一些大型的JS框架中(如上面所说的),因为这个匿名函数的函数体相当于提供一个匿名的名字空间,这样就不会再与用户自定义的JS函数、变量、对象发生冲突了。尽管JS没有显示地提供命名空间的定义和使用机制,但这种匿名方式却不失为是一种很好的解决命名空间问题的方法。

所以说,(function(){代码})()就等于执行了一个函数,只不过它是匿名的而已。如果在这个匿名函数内部想再次调用这个函数,就需要调用constructor属性了(这是Object中定义的,JS的继承机制如同Java一样保证了了所有对象都继承Object类)。