// b = function a(){ code } 是函数字面量形式,不是函数声明,它等价于 b = function(){ code },
// a并没有被重定义为一个函数所以结果为 undefined
var a,
b = function a(x) {
x && a(--x);
};
alert(a); //undefined
//javascript在执行之前会准备代码的运行环境,此时所有使用var声明的全局变量都会被添加的执行环境中,
// 但是这些变量是否就能真正成为全 局变量, 还要决定于javascript的执行情况,下面的这一段代码就说
// 明:在准备代码的执行环境时a被添加到了window中,但是没有被初始化; 由于运行中if中的条件为false,
// 所以a不会被初始化。所以结果是undefined。如果不使用 var 声明变量,则变量不会立刻添加到全局环境中,当代码执行到该处时才会成为全局变量
alert("a" in window);//true
if (!("a" in window)) {
var a = 1;
}
alert(a); //undefined
//函数和变量名称相同,如果变量已经被初始化,则不能相互覆盖;如果变量未初始化,函数会覆盖变量。
// 即变量的声明可以被覆盖,但是赋值不能被覆盖;
function a(x) {
return x * 2;
}
var a;
alert(a); //function
function b(x, y, a) {
arguments[2] = 10;
alert(a);
}
b(1, 2, 3); // 10
function a() {
alert(this);
}
a.call(null); //window 当被传入的参数为null或undefined是默认指向window