javascript - js函数内变量只声明不赋值的问题
PHP中文网
PHP中文网 2017-04-11 12:12:56
[JavaScript讨论组]
 function box(obj){
        var obj;
//        obj = {name:122}
        console.log(obj);
    }
    var obj = new Object({name:1});
    box(obj);
    console.log(obj.name);

js函数体内,如果只是声明一个同名变量但是不赋值,这个时候为什么还是可以访问全局变量?

这个时候不是由于有局部变量的存在访问应该返回undefined嚒

PHP中文网
PHP中文网

认证0级讲师

全部回复(7)
高洛峰

造成这个问题主要原因是您把变量声明和变量赋值理解混了。变量声明发生在编译器,而变量赋值发生在执行期。var obj; // 只是变量的声明,发生在编译期,不管您写不写,函数内的变量声明都会提前。js在执行时会对相同变量声明作归纳的处理,以最近的变量赋值作为变量在执行时的值。您这边最近的变量赋值是您传入的全局的obj。

迷茫

我怎么感觉是这个样子的呢 - -?

box(obj);

调用将全局的obj传入了函数内;
函数内var obj发现此变量已经存在,不再重复声明;

阿神
function box(obj){
    var obj;
    //   obj = {name:122}
    obj.name = 222;
    console.log(obj);
}
var o = new Object({name:1}); /* 借题 我 问 一下  
var o = new Object({name:1});
是不是 相当于
var o = {name : 1}; 如果 是 的 话 那 我就 不感觉 奇怪 了 如果 不是 请 大神 解答 一下
*/
box(o);
console.log(o.name); // 222
怪我咯

函数参数和函数内声明变量都属于声明变量,当函数运行时,首先进行内部代码编译,编译时对于重复声明会自动忽略后面的声明。

PHP中文网

感觉就像这样:

var name = "Julien";
var name;
console.log(name);

现在name还是"Julien",不是undefined,未赋值的重新声明会被忽略。

PHP中文网

亲,box的参数也叫obj。其实这个时候函数中第一行的var obj是没有作用的。
http://zonxin.github.io/post/...

迷茫

代码从上到下执行的时候首先应该是将obj声明为Object类的一个实例了。里面已经有属性名name,值为1。然后在执行函数box(obj)的时候形参obj被传进一个实参为obj的一个Object的类方法。此时里边已经有值而不是undefined。个人一点小拙见,希望与大家讨论。

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

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