1、一切未声明定义的变量(没有var)是全局变量属于window全局域
2、全局声明定义的变量是全局变量属于window全局域
function test() { var a = b = 123 } test() //console.log(a)//报错 a is not defined console.log(window.a) //undefined console.log(b, window.b) //123 123 b未声明直接赋值 var aa = 1234 console.log(aa, window.aa) //1234 1234
3、1、创建一个AO对象 2、找形参和变量声明,将变量和形参名作为AO属性名,值 为undefined 3、将实参值和形参统一 4、在函数体里找函数声明,将函数名作为AO属性名,值为函数体本身
function fn(a) { console.log(a) //ƒ () { console.log(333) } var a = 123; console.log(a) //123 function a() { } console.log(a) //123 var b = function () { console.log(333) } console.log(b) //ƒ () { console.log(333) } function d() { } } fn(1) //预编译发生在函数执行前一刻 //预编译:1、创建一个AO对象 AO={} 2、找形参和变量声明,将变量和形参名作为AO属性名,值 为undefined AO={a:undefined,b:undefined}3、将实参值和形参统一 AO={a:1,b:undefined} 4、在函数体里找函数声明,将函数名作为AO属性名,值为函数体本身 AO={a:function a() {},b:undefined,d:function d(){}} //执行函数体(函数和变量声明可以不看):1、console.log(a) 从AO找a:function a() {}; 2、var a = 123; 给AO中属性a重新赋值AO={a:123,b:undefined,d:function d(){}} 3、console.log(a) 从AO找a:123; 4、console.log(a) 从AO找a:123; 5、var b = function () { } 给AO中属性b重新赋值AO={a:123,b:function () { },d:function d(){}}5、console.log(b) 从AO找b:function () { };
标签:function,console,log,AO,js,2024,编译,123,undefined From: https://www.cnblogs.com/howhy/p/18177355