javascript - 在 JSFiddle 中,为什么这个全局变量没有在 `window` 上定义?

标签 javascript scope jsfiddle

我有this code in a fiddle :

var a = 1;  

function b() {  
    var a = 10;  
    alert(window.a);  
}  

b();  

为什么 a 在这里未定义?它已经在全局命名空间中定义,即 window。 (有关此意外行为的示例,请参阅 the fiddle。)

最佳答案

如果您在未将位置设置为“No wrap”的 fiddle 中运行此代码,或者您不在顶级范围内的任何情况下,您的外部 a 不是全局变量window.a。考虑一个简单的示例,其中您的代码被包装在一个名为 wrappingFunc 的函数中:

// THIS would be the global `a`, outside `wrappingFunc`
var a = "now the global a is defined";

function wrappingFunc() {
    // this is NOT the global `a`
    var a = 1;  

    function b() {  
        var a = 10;  
        alert(window.a);  
    }  

    b();  
}

wrappingFunc();

当您将位置设置为 onLoadonDomready 时,这正是 JSFiddle 所做的。 (参见 What is the difference between onLoad, onDomready, No wrap - in <head>, and No wrap - in <body>?)我的 wrappingFunc 示例实际上是一个 onloadondomready 监听器函数,它防止 keep 在全局上下文中运行.

关于javascript - 在 JSFiddle 中,为什么这个全局变量没有在 `window` 上定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33080320/

相关文章:

javascript - 在jquery中使用此关键字获取所选选项的文本值

javascript - d3.js 中的图形方向和节点定位

javascript - jqGrid 选择事件单元格中的文本

scope - 为什么泛型生命周期不符合嵌套范围的较小生命周期?

sql - 按关联记录的数量对记录进行排序

javascript - 仅查看框架时 jsfiddle 结果不同?

html - 为什么 JSFiddle 在将 <html> 和 <body> 设置为 100% 时显示滚动条

javascript - Shiny :如何正确包含 Shiny 的 HTML

JavaScript 范围和执行上下文

javascript - 如何解决JavaScript 'Unxpected Token Error'?