先分析整个页面,而后逐一执行。此时会产生GO对象,Global Object对象。
GO对象javascript
一、将全部变量做为GO的属性,值均为undifinedjava
二、将函数声明也做为GO的属性,值为函数体。当函数声明和变量名相同时,覆盖第一步面试
执行函数时,产生AO对象,Actived Object对象。函数
一、将多有变量,形参做为AO的属性,值均为undifinedcode
二、实参的值赋给形参对象
三、将函数声明做为AO的属性,值为函数体,一样若与变量相同则覆盖ip
1.建立GO(global object)/AO(active object)对象
2.找形参和变量声明,将变量和形参名做为AO属性名,值为undefined
3.将实参值和形参统一
4.在函数体里面找函数声明,值赋予函数体
function f(a){ console.log(a); var a=123; console.log(a); function a(){} var b=function(){} function d(){} } f(1)
1.建立AO对象
io
AO={}
2.找形参和变量声明,将变量和形参名做为AO属性名,值为undefined
console
AO={ a:undefined, b:undefined }
3.将实参值和形参统一
编译
AO={ a:1, b:undefined }
4.在函数体里面找函数声明,值赋予函数体:因为在函数中有 function a() {} ,这一函数所以此时AO中 a = function a() {}
AO={ a:function a(){}, b:undefined, d:function d(){} }
而后代码依次执行,第一个console时取AO中的a为function a(){},而后a=123,改变AO中的a
AO={ a:123, b:undefined, d:function d(){} }
接着打印a为123
附带京东面试题
var name = 'Tom'; (function() { if (typeof name == 'undefined') { var name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); } })();
变形一
var name = 'Tom'; (function(name) { if (typeof name == 'undefined') { var name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); } })(name);
变形二
var name = 'Tom'; (function() { if (typeof name == 'undefined') { let name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); } })();