javascript - 关于js函数 形参和局部变量名相同后的一些问题?
大家讲道理
大家讲道理 2017-04-11 13:32:43
[JavaScript讨论组]
function f1(a) {
    console.log(a);// 10;  这里我开始觉得是undefined的
    // 我以为var a=1会先把var a=undefined 放在函数的最前面 但是好像并没有
    var a=1;
    console.log(a);// 1 
    console.log(arguments[0])// 1;  这里我觉得也是10
}
f1(10)
按照f1这个打印看来 var 声明的a 好像和形参a是有联系的 但是他们不是应该没有联系吗?
function f2(a) {
    console.log(a); //10
    var a;
    console.log(a);//10
    console.log(arguments[0])//10
}
f2(10)
f2 里面的a好像什么事都没做

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
怪我咯
function f1(a){
   //遇到 function ,创建独立的作用域
    
   var a; //无论var在哪里,都会提先执行
   /*
      a 本身就是独立作用域
      var a;
      a = argument[0];
   */
       
   console.log(a);//a 指向了 arguments[0] == 10
   // 我以为var a=1会先把var a=undefined 放在函数的最前面 但是好像并没有
   /*
     var a=1;
   */
   a = 1; //var a = 1;
   console.log(a);// 1 
   console.log(arguments[0])// 1; 这个我也有点意外
 }

假如 a 不是 arguments 的一份子,var赋值也会是相同的结果

function f2(){
   b = 10;
   console.log(b);    //10
   var b = 1;
   console.log(b);    //1
}

console.log(arguments[0])// 1; 这个我也有点意外

function f3(){
   c = arguments[0];
   console.log(c);    //10
   var c = 1;
   console.log(c);    //1
   console.log(arguments[0]);    //10
}
f3(10);

可能当做对象处理了,当做对象绑定了。

PHP中文网

形参a与局部变量a是同一个参数而非同名变量,同一作用域中哪来的同名变量……

怪我咯

变量声明前置是不假,但是如果发现已经有了的话,声明就被忽略了。还有严格模式下,像第一种情况是无法修改arguments[0]的值的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号