-
console.log(a); // 函数会经过预加载提前到上面 所以这个时候打印的是一function
-
console.log(a()); // 这个时候执行a方法
-
var a=1; //这里的 相当于最上面var了a 这里赋值a=3
-
function a(){ //这里声明a为一个函数 console.log(1); }
-
console.log(a); // 这里是直接打印a 上面已经能给赋值为1了
-
a=3 // 这里是声明a=3
-
console.log(a()) // 这个时候a变成了3 所以没办法调用
-
var a=2; //这里涉及到的一个点就是函数声明和变量声明都会被提升。但是一个值得注意的细节 (这个细节可以出现在有多个“重复”声明的代码中) 是函数会首先被提升,然后才是变量。
-
function a() {
console.log(3); } -
console.log(typeof a); // nmber
//欺骗(被弃用) function foo(obj) { with (obj) { a = 2; } }
var o1 = { a: 3 };
var o2 = { b: 3 };
foo( o1 ); console.log( o1.a ); // 2 // foo( o2 );(因为是非严格模式 但当我们将 o2 作为作用域时,其中并没有 a 标识符,因此进行了正常的 LHS 标识符查找) o2 的作用域、foo(..) 的作用域和全局作用域中都没有找到标识符 a,因此当 a=2 执行
时,自动创建了一个全局变量(因为是非严格模式) console.log( o2.a ); // undefined console.log( a ); // 2——不好,a 被泄漏到全局作用域上了!