對於“JavaScript 函數參數是傳值(byVal)還是傳址(byRef)”這個問題
這樣不對嗎?為什麼會有這樣的誤區?看一下這兩段代碼
//造成傳值假象的代碼
function modifyLikeByVal(x){
x =
console
}
var x =
console
modifyLikeByVal(x); // 輸出 x =
console
//造成傳址假象的代碼
function modifyLikeByRef(x){
x[
x[
x[
console
}
var x = [
console
modifyLikeByRef(x); // 輸出 x = [
console
於是
問題出在哪呢?
仔細觀察兩個函數
在byVal中
而byRef中
本人由此得出猜想
這樣上面的代碼就可以得到解釋了
在“byVal”中
global { // 表示全局作用域
var x =
fun(x) {
x = global
x =
} // fun 域結束
}
在“byRef”中
global { // 表示全局作用域
/*
初始化指針x並指向數組[
其實是x的三個成員
*/
var x = [
fun(x) {
x = global
/*
在fun域中的x沒有再被改變
緊接著修改fun域中的x(也就是global
*/
x[
x[
x[
} // fun 域結束
}
那這段代碼怎麼解釋呢???
(function(a
arguments[
b =
console
})(
只能說a
如果有不對的地方
如果有更好的解釋
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20108.html