一、undefined
在Js中,有两个表示‘空’的值undefined和null,其中比较有用的是 undefined。undefined 是一个值为 undefined 的类型。JavaScript语言也定义了一个全局变量,它的值是 undefined,这个变量也被称为undefined。 但是这个变量不是一个常量,也不是一个关键字。这意味着它的值可以轻易被覆盖。为了避免可能对 undefined 值的改变,一个常用的技巧是使用一个传递到匿名包装器的额外参数。在调用时,这个参数不会获取任何值。如下例子:
var undefined = ‘cat’;
(function(undefined) {
// 局部作用域里的 undefined 变量重新获得了 `undefined` 值
console.log(undefined); // mayan
})('mayan');
更好的例子是在早期的jQuery代码中(1.5版本前的jQuery中),你会发现第一行直接就是function(window, document, undefined)这样直接调用的。很多人不明白这里整个未定义的undefined变量有何用,其实这里的undefined就是这样来的。
二、undeclared
而undeclared则是一种语法错误,其实访问undeclared的变量并非会中断浏览器执行。在浏览器运行上下文中,undeclared出来的变量简单可以认为是没有这样var a这样定义变量,Js引擎执行的时候,由于无法找到其对应的上下文(scope),会简单地认为该变量是全局的变量,就是会把该变量定义到window中去!