当前位置: 首页 > 面试题库 >

为什么在使用strict时未定义匿名函数中的“ this”?

燕文昌
2023-03-14
问题内容

在严格模式下使用javascript时,为什么在匿名函数中未定义此函数?我知道为什么这样做可能有意义,但是我找不到任何具体答案。

例:

(function () {
    "use strict";

    this.foo = "bar"; // *this* is undefined, why?
}());

问题答案:

这是因为,在ECMAscript 262第5版之前,如果使用的人constructorpattern忘记使用该new关键字,那会造成很大的混乱。如果new在ES3中调用构造函数时忘了使用,请this引用全局对象(window在浏览器中),然后用变量破坏全局对象。

这是可怕的行为等人在ECMA决定,只是为了集thisundefined

例:

function myConstructor() {
    this.a = 'foo';
    this.b = 'bar';
}

myInstance     = new myConstructor(); // all cool, all fine. a and b were created in a new local object
myBadInstance  = myConstructor(); // oh my gosh, we just created a, and b on the window object

最后一行会在严格的ES5中引发错误

"TypeError: this is undefined"

(这是一个更好的行为)



 类似资料:
  • 问题内容: PHP 5.3提供了匿名函数。 我应该使用它们还是避免使用它们?如果是这样,怎么办? 编辑 ; 刚刚发现了一些与php匿名函数有关的妙招… 问题答案: 当使用需要回调函数的函数(例如或做)时,匿名函数非常有用: 否则,您将需要定义一个只能使用一次的函数:

  • 本文向大家介绍什么是JavaScript中的匿名函数?,包括了什么是JavaScript中的匿名函数?的使用技巧和注意事项,需要的朋友参考一下 函数表达式与函数声明相似,并且具有与函数声明相同的语法。可以定义“命名”函数表达式(例如,在调用堆栈中可能使用表达式的名称)或“匿名”函数表达式。 匿名函数表达式的示例(未使用名称)- 可以使用引用该函数的变量名来调用此函数- 总之,匿名函数是未存储但与变

  • 本文向大家介绍common-lisp 定义匿名函数,包括了common-lisp 定义匿名函数的使用技巧和注意事项,需要的朋友参考一下 示例 Common Lisp中的函数是一等值。可以使用创建匿名函数lambda。例如,这是3个参数的函数,然后我们使用调用funcall 匿名函数也可以直接使用。Common Lisp为此提供了一种语法。 匿名函数也可以存储为全局函数: 带引号的lambda表达式

  • 我有一个自动执行的函数,它包含很多东西,其中at函数是我想要全局化的。我通常只在全局范围内声明它,但它需要能够引用仅对自执行函数局部的变量。 在不完全去掉自执行函数(从而在全局空间中乱扔变量)的情况下,使函数全局可访问的最佳方法是什么?

  • 本文向大家介绍什么是JavaScript中的自调用匿名函数?,包括了什么是JavaScript中的自调用匿名函数?的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中,用括号括起来的函数称为“立即调用函数表达式”或“自执行函数”。 包装的目的是为了命名空间并控制成员函数的可见性。它将代码包装在函数范围内,并减少了与其他库的冲突。这就是我们所说的立即调用函数表达式(IIFE)或自执行匿

  • php版本: 5.4 我定义了一个这样的函数 输出是 如何在的正文中引用。