Ric*_*uen 9 javascript terminology
学习JavaScript这本书将匿名函数定义如下......
功能是对象.因此,您可以通过使用构造函数并将函数分配给变量来创建它们 - 就像一个
String或Array其他类型一样.在下面的代码中,使用Function构造函数创建一个新函数,函数体和参数作为参数传入:Run Code Online (Sandbox Code Playgroud)var sayHi = new Function("toWhom", "alert('Hi' + toWhom);");这种类型的函数通常被称为匿名函数,因为函数本身不是直接声明或命名的.
这是JavaScript中"匿名函数"的正确定义吗?如果没有,什么是匿名函数,匿名函数和函数文字之间有什么区别?
ale*_*lex 16
由于您对功能感兴趣,这里有一些重要的事情需要了解.
var abc = function() { ... }被称为函数表达式.该变量将在执行时分配给该匿名函数,但其变量声明将被提升到当前执行上下文(范围)的顶部.
但是,函数表达式也可以赋予名称,以便可以在其体内调用它以使其递归.请记住IE有一些问题.当您为其指定名称时,它绝对不是匿名函数.
一个函数,如function abc() { ... }被称为函数声明.它的定义被提升到其范围的顶部.它的名称在其内部及其父级范围内可用.
它是一个匿名函数,但已分配给变量sayHi.
正如ŠimeVidas所提到的,Function使用new运算符实例化一个新对象,并将参数和函数体作为字符串传递.生成的对象被分配给sayHi.
使用这种方法创建函数的现实世界很少见(尽管它可能只是为了帮助显示函数是对象).我还相信将其参数列表和函数体作为字符串传递将调用一个eval()类型函数,当一个更好的构造可用时,这很少有用.
此外,创建的函数Function 不会形成闭包.
我只会使用这种方法,如果由于某种原因我需要创建一个Function带有它的参数和/或body只能作为字符串使用.
在现实世界中,你会......
var sayHi = function(toWhom) {
alert('Hi' + toWhom);
};
Run Code Online (Sandbox Code Playgroud)
另请参阅Felix和Šime的评论,以获得良好的讨论和进一步的澄清.
| 归档时间: |
|
| 查看次数: |
9376 次 |
| 最近记录: |