js直譯器執行**的過程:
定位到呼叫函式的code處;.
執行function
code前, 建立execution context
.
進入建立階段:
(變數宣告)scan the context for variable declarations:
確定context中"this"
的值。
activation / code execution stage:
example:
function
foo(i);
functionc()
}foo(22)
;
on callingfoo(22)
, thecreation stage
looks as follows:
fooexecutioncontext = ,
variableobject: ,
i: 22,
c: pointer to function c()
a: undefined,
b: undefined
},this:
}
as you can see, thecreation stage
handles defining the names of the properties, not assigning a value to them, with the exception of formal arguments / parameters. once thecreation stage
has finished, the flow of execution enters the function and the
activation
/ codeexecution stage
looks like this after the function has finished execution:
fooexecutioncontext = ,
variableobject: ,
i: 22,
c: pointer to function c()
a: 'hello',
b: pointer to function privateb()
},this:
}
(
function()
;function
foo(
)
console.log(typeof foo);//string 這裡可以測試出在ao物件中 foo的值==hello
console.log( foo());//報錯,foo is not a function. (變數宣告是在函式宣告和函式形參之後,所以執行後foo就是字元變數了,根據結果,個人理解)
}()
);
the questions we can now answer are:
foo is declared twice, why is foo shown to befunction
and notundefined
orstring
?
bar的值為什麼是undefined
?
這篇文章寫得很贊,下班了,有空繼續翻譯。哈哈!
變數物件:如上
活動物件:感覺是進入執行上下文後,變數物件中的變數宣告被賦值了、
javascript中this執行上下文的改變
this關鍵字引用的是包含它的函式作為某個物件的方法被呼叫時的那個物件。哈哈,先看案例 先編寫乙個庫 function function if arguments.length 1 elements.push element return elements window yc function ad...
理解javascript中的「自動執行函式」
因為之前看了jquery的原始碼,對於原始碼中的一開始的 不是很理解,後來到網上查了查,有了大致的了解,怕忘記了,所以記錄一下。function a 1 上面的 就是乙個自動執行的 函式,和 中的一樣。其中的 function a 是乙個匿名函式,接受乙個引數。隨後的 1 表示對這個匿名函式的呼叫,...
javascript中的自執行匿名函式
格式 function 解釋 這是相當優雅的 如果你首次看見可能會一頭霧水 包圍函式 function 的第一對括號向指令碼返回未命名的函式,隨後一對空括號立即執行返回的未命名函式,括號內為匿名函式的引數。來個帶引數的例子 function arg 20 這個例子返回120。重要用途 可以用它建立命...