标签:this define 相同 efi 上下文 oba 匿名 code log
imply global 暗示全局变量:
如果变量没有声明直接赋值,系统不会报错.此时该变量归为全局对象window对象所有。
等效于在全局用 var 关键字声明该变量。
例如, 直接 a = 10; 这时候 window.a == 10 --- this.a == 10,这里this指向window。
window就是JS全局的域,任何全局变量都是window的属性。 例如
预编译:发生在函数和页面执行之前。函数整体提升(声明+赋值),变量声明提升,即把声明函数和变量的行都移动到前几行读取解析。具体步骤如下:
/*预编译*/ function f(a){ console.log(a); var a = 100; console.log(a); function a() {} console.log(a); var b = function() {} console.log(b); function d(){} } /*预编译后,g(1)等效于*/ function g(a){ var a; var b; a = 1 b = function(){} a = function a(){} var d = function d(){} console.log(a); a = 100; console.log(a); console.log(b); } // 规律: 函数内如果有形参同名的函数,则预编译后,函数执行前,该形参或者变量的初始值就是那个函数 // 预编译也发生在全局,因此会导致变量提升 function test(){ // b没有声明,因此是全局变量,不存在AO中,存在于window中 // a已声明,因此是局部变量,存在AO中不存在window中 var a = b = 10; } /*练习*/ global = 100; function fn(){ console.log(global); // undefined global = 200; console.log(global); // 200 var global = 300; console.log(global); // 300 } var global; /*练习*/ function tst(){ console.log(b); // undefined if(a){ var b = 100; } console.log(b); // undefined,因为运行该函数时a还没有赋值,是undefined==false c = 234; // 没有在函数内声明,放入全局变量 console.log(c); // 234 } var a; tst(); a = 10; console.log(c); //234 /*难题*/ a = 100; function demo(e){ function e(){} arguments[0] = 2; console.log(e); // 2 if(a){ var b = 123; function c(){ // 谷歌不允许 } } var c; a = 10; var a; // a已在demo内声明,因此if里读取AO内的a,又因为a没有赋值,所以if内的语句不执行 console.log(b); // undefined f = 123; console.log(c); // undefined console.log(a); // 10 } var a; demo(1); console.log(a); // 100 console.log(f); // 123
标签:this define 相同 efi 上下文 oba 匿名 code log
原文地址:https://www.cnblogs.com/sven4900/p/14047611.html