#前言javascript
声明部分:
包涵:
声明的内部函数,变量,参数,维护一个地址池,地址池里面的地址指向内部函数,变量和参数。
本质:就是函数对象的属性
执行部分:
包涵:
除了声明之外的计算过程都包含在这个里面
本质:就是函数对象的一个方法
参数部分
在调动函数部分时动态赋值
java
引擎发现下面这个函数声明编程
function funOut(arg,arg1){
var prop = 0;
function funInner(){
console.log(porp1);
}
var props = 1;
funInner();
console.log(arg,arg1);
}
复制代码
整体经历了如下几步windows
1建立scope对象并建立地址池
var funOut = {
arg:null,
arg1:null,
prop:null,
prop1:null,
funInner:null,
_props_:window,
init:function(supperContext,arg,arg1){
funOut. _props_ = supperContext||windows
funOut.arg = arg,
funOut.arg1=arg1,
funInner = function(funOut,arg,arg1){
funOut.arg = arg,
funOut.arg1=arg1
},
},
applay:function(){
prop = 0;
porp1 = 1;
funInner();
console.log(arg,arg1);
},
this:windows//由于funOut对用户不可见,this只是一个特殊的处理而已
}
注:上面这个结构是引擎经过引擎内置语言实现的,对用户不可见,有多是C也有多是汇编这个不是重点
复制代码
其实到如今变量提高缘由已经很明显了,函数对象不是js对象遵循其余编程语言规范
function cir(){
cir()
}
function cor(){
setTimeOut(function(){
cor
},2000);
return true;//cor函数执行到此处已经完结,弹出栈因此cor的深度是固定的
}
注意两则的本质区别
复制代码
以上东西不少为我的臆测。若是有指导更正感激涕零!bash