javascript管中窥豹 形参与实参浅析(3)


// function fn_2(x){
// var x = 3;
// console.log(x,arguments[0]);
// arguments[0] = 2;
// console.log(x,arguments[0]);
// }
// fn_2(1)
//在fn_2body中,用_args[i]["link"] = true;来表示形参与实参相关联
var fn_2body = ''+
'_args[0][_args[0]["key"]] = 3;'+
'if(_args[0]["link"]){ _arguments[0] = _args[0][_args[0]["key"]];}' +
'console.log(_args[0][_args[0]["key"]],_arguments[0]);'+
'_arguments[0] = 2;'+
'if(_args[0]["link"]){ _args[0][_args[0]["key"]] = _arguments[0]}' +
'console.log(_args[0][_args[0]["key"]],_arguments[0]);';
var fn_2 = new _Function('x',fn_2body);
fn_2.exec(1);


画了一张图来表示实例与改写函数两者的关系,顺便也改了一下:

javascript管中窥豹 形参与实参浅析

回到文章开头的例子:

复制代码 代码如下:


function fn(x){
x = 10;
arguments[0] = 20;
console.log(x,arguments[0])
}
fn()


显然,两者相互独立:
x = 10,arguments[0] = 20;
推测一下:

复制代码 代码如下:


function fn(x){
x = 10;
arguments[0] = 20;
console.log(x,arguments[0])
}
fn(1)


应该都是输出20,20

复制代码 代码如下:


function fn(x){
arguments[0] = 20;
console.log(x,arguments[0])
}
fn(1)


应该也都是输出20,20

复制代码 代码如下:


function fn(x){
arguments[0] = 20;
console.log(x,arguments[0])
}
fn()


应该是undefined和20
原文来自cnblogs小西山子

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdjjzs.html