javascript - 为什么这个全局变量在函数内未定义?

标签 javascript

如果在同一个函数内重新声明并定义相同的全局变量,为什么该全局变量在函数内未定义?

var a = 1;
function testscope(){
 console.log(a, 'inside func');
 //var a=2;
};
testscope();
console.log(a, 'outside func');

output:
1 "inside func"
1 "outside func" 

考虑相同的代码,其中 var a = 2;内部功能 block 未注释

var a = 1;
function testscope(){
 console.log(a, 'inside func');
 var a=2; 
};
testscope();
console.log(a, 'outside func');

Output
undefined "inside func"
1 "outside func"

最佳答案

这是因为 Javascript 与 Java 不同,变量声明总是被推到它们的 block 上。您的第二段代码严格相当于:

var a = 1;
function testscope(){
 var a;  // <-- When executed, the declaration goes up here
 console.log(a, 'inside func');
 a=2;  // <-- and assignation stays there
};
testscope();
console.log(a, 'outside func');

Output
undefined "inside func"
1 "outside func"

关于javascript - 为什么这个全局变量在函数内未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47477256/

相关文章:

javascript - JSON.parse localStorage 输入错误意外结束

javascript - 用于复选框和标签的 Backbone View 事件处理程序

javascript - 具有 ID 的 DOM 树元素会成为全局属性吗?

javascript - 单击提交按钮并将数据插入 php 中的数据库表时如何显示隐藏表?

javascript - 如何从数组中删除元素(包括下一项)-jquery

javascript - NodeJS parseStream,定义一个 block 的起点和终点

javascript - 我如何测试 Internet Explorer 版本是版本 7 还是版本 8?

javascript - XPage - @WarningMessage 的参数?

javascript - 如何在服务器端 Blazor 中使用 Bing Javascript map ?

javascript - 没有 REST 使用 ASP .net webservice 的 Backbone.js