所有JavaScript函数类型
All JavaScript Function Types?
在为我的小代码库编写几个测试项目时,我遇到了许多关于以多种不同方式编写函数的教程。
例如:- 函数声明
-
FunctionDeclaration : function Identifier ( FormalParameterList opt ){ FunctionBody }
-
- 函数表达式
-
FunctionExpression : function Identifier opt ( FormalParameterList opt ){ FunctionBody }
-
匿名自执行函数
-
(function(msg){ alert(msg); })('SO'); // alerts "SO"
-
匿名自执行函数,我在源代码中看到,我怀疑可能是不正确的,但我想确保
-
(function(msg){ alert(msg); }('SO')); // alerts "SO", but the passed parameter appears inside the parenthesis that wrap the function, not after like I think is correct.
-
说了这么多,我想澄清关于每种类型的函数的几个问题。
函数声明:
function display(){
//this function is evaluated at parse time,
can be called any time
}
函数声明(在解析时评估,不需要括号后的括号)可以被覆盖函数表达式,因为这个问题似乎表明,这个源代码似乎备份?:
var display = function(){
//this function will be called as opposed to the
//display() declaration (above) any time
//display() is used after this variable assignment
};
函数表达式:
var display = function nameOptional(){
};
在赋值给变量的函数表达式中括号后的分号是必要的吗?还有,这是否意味着这个:
function name(){
//...
};
不同于this:?
function name(){
//...
}//no semi-colon
第一个name()
是函数表达式,第二个name()
是函数声明吗?还是第一个name()
是函数表达式,第二个name()
是带有可选的省略的分号的函数表达式?因为我在函数表达式中读到过,分号只被推荐使用。让我感到困惑的是,在函数声明中必须有标识符和函数体。在表达式中,标识符是可选的,但必须有一个主体。所以如果你有
function identifier(){
//...body...
}
是声明还是表达式,因为表达式或声明中不需要分号。对于表达式,仅建议在变量赋值的情况下获得最佳结果。
匿名自执行函数:
我明白这是怎么回事,但我看到了两种写法,其中一种我几乎可以肯定是错误的。我只是想澄清一下:
(function(msg){
alert(msg);
})("SO");
和
(function(msg){
alert(msg);
}("SO"));
我读到一个匿名函数执行的原因是因为它被包装在()
中,如果你想要任何参数传递给它,它们必须在那些()
之后和分号之前添加,如果这是真的…第二个匿名函数写错了…这是真的吗?
我已经阅读了几个问题,这些问题已经通过这个链接和包含此信息的内容得到了回答
只有您在这里确定的前两种类型的函数是"真实的"。其他两个是函数表达式的应用。
按顺序浏览你的问题:
是真的,函数声明(在解析时评估,不需要括号后的括号)可以被函数表达式覆盖,因为这个问题似乎表明,这个源代码似乎备份?
是的。(不幸的是)。第二次声明函数会覆盖第一次定义。但是,如果对原始函数的引用被赋值给一个变量,则原始函数仍然可以访问;例如:
function a() { console.log(1); }
var a1 = a;
function a() { console.log(2); }
a1(); // outputs "1"
a(); // outputs "2"
在赋值给变量的函数表达式中括号后的分号是必要的吗?
一般来说,是——它表示语句的结束,就像var a = 1;
中的分号一样。有时它是可选的,就像Javascript中的大多数分号一样,但省略它是不可取的。
而且,这是否意味着[带分号的函数声明]与[不带分号的函数声明]不同?
在函数声明的末尾,分号不是必需的,也没有意义。它实际上被解释为声明之间的独立分号,没有任何作用。
我读到一个匿名函数执行的原因是因为它被包装在()中,如果你想要任何参数传递给它,它们必须在那些()之后和分号之前添加,如果这是真的…第二个匿名函数写错了…这是真的吗?
他们都很好;这是一种风格的选择。这一行必须以function
以外的东西开始,这样它就不会被解释为函数定义,所以使用了一个初始括号,但是括号的确切位置并不重要。如果我们将整个函数表达式替换为a
,则(a)()
和(a())
之间的比较是简单的;没有真正的区别。
我想你应该知道:
// Function
function Function() {}
// Generator Function
function* Function() {}
// Asynchronous Function
async function Funtion() {}
// Asynchronous Generator Function
async function* Function() {}
// Class
class Function {}
class Function extends Object {}
// Arrow Function
() => {}
这里有一些有用的链接,提供了一些关于所有类型的JavaScript函数的细节和示例:
函数声明,函数表达式,函数表达式分组操作符,命名函数表达式,立即调用函数表达式,函数构造函数,对象构造函数,ES6箭头函数,clores, Closure和scope…
JavaScript作用域上下文和' this '在后台
在JavaScript中定义函数的不同方式(这太疯狂了!)
JavaScript中定义函数的不同方式
JavaScript函数
JavaScript函数的6种声明方法
Functions -浏览器兼容性
JavaScript闭包是如何工作的?
这些文章和教程,我发现可以帮助更好地理解JavaScript类型的函数和函数表达式的应用程序。我希望他们能帮助你。
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 如何在DOM元素上按类型构建此函数
- 如何将具有文本类型值的var放入jQuery函数中
- 为什么不'我们在javascript中使用函数参数的数据类型
- 未捕获的类型错误:$(..).dataTable不是函数
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 如何降低此函数的复杂性,该函数根据数据类型进行回调
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- 在JavaScript类型的函数中避免self-this
- 类型error primeFactors.for不是函数
- 使用@typedef定义特定的函数类型
- mootools 类型函数
- 打字脚本:参数类型函数不能分配给参数类型函数
- 什么是函数的数据类型:函数还是对象?在 JavaScript 中
- 检查 Javascript 中不同类型函数的相等性
- JavaScript:我能以某种方式强类型函数参数吗
- Firebreath JavaScript错误:不支持:类型函数中没有toString()函数
- JavaScript 的类型函数是否检查空值
- 如何在一个文档中使用两个id.getElementById类型函数
- 当第一次调用返回类型函数时,没有调用两个javascript函数