栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript为什么需要在同一行上调用匿名函数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript为什么需要在同一行上调用匿名函数?

将分号放在函数定义之后。

(function (msg){alert(msg)})('SO');

以上应该工作。

编辑:

如果您查看ECMA脚本规范,则可以通过3种方式定义函数。(第98页的第13节“功能定义”)

1.使用函数构造函数

var sum = new Function('a','b', 'return a + b;');alert(sum(10, 20)); //alerts 30

2.使用函数声明。

function sum(a, b){    return a + b;}alert(sum(10, 10)); //alerts 20;

3.函数表达式

var sum = function(a, b) { return a + b; }alert(sum(5, 5)); // alerts 10

所以您可能会问,声明和表达式之间有什么区别?

根据ECMA脚本规范:

FunctionDeclaration:函数标识符(FormalParameterListopt){FunctionBody}

Functionexpression:function
Identifieropt(FormalParameterListopt){FunctionBody}

如果您注意到,“ identifier” 对于函数表达式是 可选 的。当您不提供标识符时,您将创建一个匿名函数。这并不意味着您无法指定标识符。

这意味着跟随是有效的。

var sum = function mySum(a, b) { return a + b; }

需要注意的重要一点是,只能在mySum函数主体内使用“ mySum”,而不能在外部使用。请参见以下示例:

var test1 = function test2() { alert(typeof test2); }alert(typeof(test2)); //alerts 'undefined', surprise!test1(); //alerts 'function' because test2 is a function.

比较一下

 function test1() { alert(typeof test1) }; alert(typeof test1); //alerts 'function' test1(); //alerts 'function'

有了这些知识,让我们尝试分析您的代码。

当您有类似的代码时,

    function(msg) { alert(msg); }

您创建了一个函数表达式。您可以通过将其包装在括号内来执行此函数表达式。

    (function(msg) { alert(msg); })('SO'); //alerts SO.


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号