javascript - 闭包 - JS Fiddle 和简单 HTML 文件上的不同行为

标签 javascript scope closures global-variables jsfiddle

我正在编写一个简单的示例来演示关闭。当我在 JS Fiddle 上写这篇文章时,我可以看到闭包值在控制台中正确传递。如果我尝试制作一个 HTML 页面并在控制台中查看,情况也是如此。关闭通过就看不到了。对于这两种情况,我都使用 Chrome。当代码相同且浏览器相同时,为什么会有不同的行为?魔力在哪里?

HTML

<script> 
var a = 10; 
var addTo = function(){
var b = 20;
return (a + b); 
}
console.dir(addTo);
</script> 

jsFiddle

index.html

最佳答案

当您将此代码粘贴到 JS Fiddle 上时, <script> 的内容标签实际上看起来像这样:

//<![CDATA[
window.onload=function(){
var a = 10; 
var addTo = function(){
var b = 20;
return (a + b); 
}
console.dir(addTo);
}//]]> 

这会创建另一个闭包,并且 a属于该闭包。

但是,如果您在一个简单的 HTML 文件中运行此代码,则不会关闭,并且 a属于全局范围。

关于javascript - 闭包 - JS Fiddle 和简单 HTML 文件上的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39013379/

相关文章:

来自 Javascript JSONArray 的 Java JSONArray

javascript - AngularJS 杀死了我的 Javascript 函数

javascript - 访问 javascript 中内联函数内所做的变量修改

java - 将 java 类作为闭包绑定(bind)到 groovy 脚本中

php - JavaScript "call on declare"在 PHP 中等效的匿名函数?

javascript - 通过 AJAX 发布时如何忽略 JSON 数据?

javascript - js比较二维数组

jquery - 从 $.get w/Backbone.js 内部访问 this.model

python - 无法理解 python 函数中的不可变、可变、作用域

r - 'closure' 类型的错误对象不是子集