首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生活方式的混乱

生活方式的混乱
EN

Stack Overflow用户
提问于 2019-05-10 06:12:29
回答 2查看 96关注 0票数 3

我是JavaScript的初学者,在JavaScript的工作方式上遇到了困惑。也就是说,我知道它基本上是用来转义变量的,它被分配给一个全局变量,以避免碰撞。但事情是这样的,比如说,我们有这样的代码:

代码语言:javascript
复制
var number = 7;

(function() {
  var number = 7;
  alert(number);
})();
//In this code collision does not happen due to IIFE

但如果我写:

代码语言:javascript
复制
var number = 7;

function num() {
  var number = 7;
  alert(number);
}

/*In this code there does not happen collisions and 
number variable is not assigned to the global scope as well. So, why use IIFE?*/
num();

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-10 06:35:45

立即调用的函数表达式(IIFE)有多个用途。您关注的问题是,在声明变量(或任何其他函数/方法)时,IIFE不会污染全局范围。

另一件重要的事情是使用IIFE可以让您的代码立即运行,而不需要其他人的代码干扰。此外,IIFE运行时无需调用函数的名称为,该函数可能存在于全局范围内。

这里的关键是您的代码都是:不干扰全局范围内的事物,并且不受外部影响,因为全局范围中的任何内容都可能被错误地覆盖。

...you正在屏蔽您的代码,以免有人意外地或有意地更改您的全局!

查看这篇关于掌握IIFE的媒体文章以获得更多信息。

更新

第二个例子可能对某些事情产生负面影响的一个很好的例子是:

如果您导入了某种库,并且它在全局范围内有一个名为num (库内部使用的方法)的方法(因为它没有使用IIFE),那么第二个示例将覆盖该方法,并使它在库中不可用。

这里的关键是,它不仅仅是范围界定。在任何方法中声明的变量的作用域都是该方法,而不是全局范围。,但命名函数在全局范围内.

票数 3
EN

Stack Overflow用户

发布于 2019-05-10 06:45:41

你搞得很混乱。生命并不影响局部变量和全局变量的工作方式。

关于全局变量和局部变量,您的两个示例没有区别。

两个变量都声明全局变量number,并使用7 (函数外部)和一个变量(也称为number )初始化它,并在函数中使用7进行初始化。函数中的变量“覆盖”全局变量;全局变量number不能在函数中使用(只使用number名称),alert()调用使用局部变量。

您可以使用以下代码变体轻松地检查此代码:

代码语言:javascript
复制
var number = 7;

(function() {
  var number = 6;
  alert('local variable: ' + number);
})();
alert('global variable: ' + number);

代码语言:javascript
复制
var number = 7;

function num() {
  var number = 6;
  alert('local variable: ' + number);
}
num();
alert('global variable: ' + number);

上面的两个代码片段具有几乎相同的效果。他们声明一个函数,然后执行它。

唯一的区别是,第二个函数在全局名称空间中创建一个名为num的函数。

有时我们不想创建一个命名的函数。例如,当它只使用一次时。在这种情况下,当一个函数被声明,然后只被调用一次时,就会使用一个生命周期。它将声明和调用打包到一个表达式中,并且不会留下不再使用的函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56071719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档