javascript中未声明的变量用法

时间:2015-10-07 13:39:03

标签: javascript jquery

如果我们尝试使用未声明但允许设置相同值的变量,为什么JavaScript会引发引用错误?

e.g

a = 10; //creates global variable a and sets value to 10 even though its undeclared
alert(b); // throws reference error.

那么为什么b,它的引用错误而不是a?

3 个答案:

答案 0 :(得分:7)

这就是语言的运作方式。在非严格模式下,对未声明符号的赋值被隐式视为创建全局变量。在严格模式下,这是一个错误。

要使用严格模式,全局脚本块或函数应以语句开头:

"use strict";

即,一个由字符串"use strict"组成的简单表达式语句。这将防止意外创建全局变量(仍然可以明确创建),并强加一些其他限制。

答案 1 :(得分:3)

根据documentation

  

变量声明,无论它们出现在何处,都会在任何声明之前处理   代码被执行。用var声明的变量的范围是它   当前执行上下文,它是封闭函数或者,   对于在任何函数外部声明的变量,global。

     

为未声明的变量赋值会隐式将其创建为   全局变量(它成为全局对象的属性)时   分配已执行。声明和声明之间的差异   未声明的变量是:

     
      
  1. 声明的变量在声明它们的执行上下文中受到约束。未声明的变量总是全局的。

  2.   
  3. 在执行任何代码之前创建声明的变量。在分配给它们的代码之前,未声明的变量不存在   执行。

  4.   
console.log(a);                // Throws a ReferenceError.
console.log('still going...'); // Never executes.
var a;
console.log(a);                // logs "undefined" or "" depending on browser.
console.log('still going...'); // logs "still going...".
  
      
  1. 声明的变量是其执行上下文(函数或全局)的不可配置属性。未声明的变量是   可配置的(例如可以删除)。
  2.         

    由于这三个不同,未能声明变量会   很可能会导致意想不到的结果。因此建议   总是声明变量,无论它们是否在函数中   或全球范围。并且在ECMAScript 5严格模式下,分配给   未声明的变量会引发错误。

答案 2 :(得分:3)

a = 10;
 内部声明var a 即在后台,它首先全局声明变量,然后设置该变量的值。

所以每当我们写作 a=10 究竟发生了什么:
var a;
a=10;
因此a永远不会undefined;

但在这种情况下,alert(b) b没有定义任何值,因此它仍为undefined

正如Pointy所说,

  

在非严格模式下,对未声明符号的赋值被隐式视为创建全局变量。在严格模式下,这是一个错误。

使用use strict

总是更好的做法