需要解释javascript中的作用域问题
Need explaination about scope issue in javascript
我有这样的代码
var Variable = "hello";
function say_hello ()
{
alert(Variable);
var Variable = "bye";
}
say_hello();
alert(Variable);
现在,当我第一次阅读这段代码时,我认为它会两次警告"hello",但我得到的结果是它第一次警告"undefined",第二次警告"hello"。谁能给我解释一下为什么?
在JavaScript中,函数中的所有var
声明都被视为出现在函数体的最顶部,无论它们实际上在代码中的哪个位置。因此,您的函数被解释为如下所示:
function say_hello() {
var Variable;
alert(Variable);
Variable = "bye";
}
注意,这只是声明被这样解释;初始化表达式发生在代码中var
实际所在的位置。因此,您的函数定义了一个名为"variable"的局部变量,它隐藏了更全局的变量。在alert()
运行时,变量还没有初始化。
您要做的是在初始化变量之前提醒它。你想要的是:
function say_hello() {
var variable = "bye";
alert(variable);
}
这将给您预期的结果。就像其他人说的var
关键字将使'scope local'。你是defining
变量after you alert it
在say_hello所以它是undefined
。使用'全局作用域',如果你在say_hello中赋值"bye",你不会得到两次"hello"警报。
var Variable = "hello";
function say_hello ()
{
alert(Variable);
//Variable = "bye";
}
say_hello();
alert(Variable);
相关文章:
- 作用域问题-此函数是否形成闭包-JavaScript
- 访问Javascript对象-Node.js的作用域问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 'simple'套接字中的作用域问题.IO服务器
- Javascript作用域问题,对象在分配后没有数据
- 可能存在Javascript作用域问题
- 本地Javascript作用域问题
- 设置Javascript函数的作用域问题
- Javascript 中使用 setTimeout 的作用域问题
- 作用域问题反应父子方法ES6
- jquery get中的作用域问题
- 绑定时出现Javascript作用域问题
- 试图覆盖全局变量时出现jQuery.post()作用域问题
- 作用域问题Uncaught ReferenceError
- 使用reduce串行链接Javascript承诺时的作用域问题
- Javascript变量作用域问题-错误:类型错误:this.graphics未定义
- extjs 4中的作用域问题
- 变量未正确赋值,可能存在作用域问题(getJSON()中的each()中有一个开关的函数)
- Javascript作用域问题:函数在$(doc).ready()中可用,但在事件处理程序中不可用
- Angular 2服务单例作用域问题