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

高级JavaScript:为什么将此函数括在括号中?[重复]

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

高级JavaScript:为什么将此函数括在括号中?[重复]

这里发生了一些事情。首先是立即调用的函数表达式(IIFE)模式:

(function() {  // Some pre})();

这提供了一种在自己的范围内执行某些Javascript代码的方法。通常使用它,以便在函数内创建的任何变量都不会影响全局范围。您可以改用以下方法:

function foo() {  // Some pre}foo();

但这需要给函数起一个名字,但这并不总是必须的。使用命名函数还意味着将来可能再次调用该函数,这可能是不希望的。通过以这种方式使用匿名函数,可以确保仅执行一次。

此语法无效:

function() {  // Some pre}();

因为您必须将函数包装在括号中才能使其解析为表达式。

因此,快速回顾一下IIFE模式:

(function() {  // Some pre})();

允许立即执行“某些代码”,就像它们只是内联编写一样,也可以在其自己的范围内执行,以免影响全局名称空间(并因此可能干扰其他脚本或被其他脚本干扰)。

您可以像普通函数一样将参数传递给函数,例如,

(function(x) {  // Some pre})(1);

因此,我们将值“ 1”作为第一个参数传递给函数,该函数将其作为局部范围的变量(名为x)接收。

其次,您可以了解函数代码本身:

delete x;return x;

删除运算符将从对象中删除属性。它不会删除变量。所以;

var foo = {'bar':4, 'baz':5};delete foo.bar;console.log(foo);

结果记录如下:

{'baz':5}

鉴于,

var foo = 4;delete foo;console.log(foo);

将记录值4,因为foo是变量而不是属性,因此无法删除。

许多人认为,由于autoglobals的工作方式,delete可以删除变量。如果在没有先声明的情况下分配变量,则它实际上不会成为变量,而是全局对象上的属性:

bar = 4; // Note the lack of 'var'. Bad practice! Don't ever do this!delete bar;console.log(bar); // Error - bar is not defined.

这次删除有效,因为您不是要删除变量,而是要删除全局对象上的属性。实际上,上一个代码段与此等效:

window.bar = 4;delete window.bar;console.log(window.bar);

现在,您将看到它与foo对象示例而不是foo变量示例的相似之处。



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

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

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