阅读 6488 次
发表时间:2007-10-25
lonelyblue 写道
var man =(function(){
    var name = "bluethinking";
    var getName = function(name){
        this.name = name; //getName函数作用域内(内部变量)的name变量
        return name;
    }(name);
    return getName;
})();

alert(man.__parent__.name); //man.__parent__获得getName函数的[[Scope]]即作用域

输出:bluethinking

hax 写道

一个函数上的__parent__属性可以获得其[[Scope]],可以通过其遍历到所有内部变量的。



谁能解释一下 以下两个疑惑
一  var man=(function....) 第一个括号把function括起来是干什么用的 有什么特殊意义吗?在一些代码里经常看到这样的写法。
二 function{...}(name);中name是什么意思,难道是立即执行将name参数传递给函数?,但从后面的调用alert(man._parent_.name),并未传递得有参数啊?
发表时间:2007-10-25
求职当js讨论了,可惜楼上上的理解错误了,看一下你的代码man在定义时候,内部自动执行的function的this是window吧,你直接就把name弄window上了,再者,gecko的__parent__是不等于Rhino的真正的scope chain的__parent__的,gecko下
Math.sin.__parent__==Math;
(function(){}).__parent__==window;
(function test(){function inner(){} alert(inner.__parent__==null)})()

当然我的问题其实是考察scope chain,也考察下对于Rhino的认识以及gecko的区别,gecko下的__parent__不是scope chain,很可能是某种host定义方法的默认宿主之类的含义

发表时间:2007-10-25
var man =(function(){   
    var name = "bluethinking";   
    var getName = function(name){
        window.age = "XX";//window下的age
        this.name = name; //window作用域(错误的理解:getName函数作用域内(内部变量)的name)
         var gender = "M"; //getName函数作用域内的gender
        return name;   
    }(name);   
    return getName;   
})();   
  
alert(man.__parent__.name);   //输出:bluethinking
alert(man.__parent__.age);    //输出:XX
alert(man.__parent__.gender); //输出:undefined 因为man.__parent__是window作用域
                                   //而不是getName函数的作用域


谢谢楼上的纠正我的错误认识。
发表时间:2007-11-11
是mofile吗?
Global site tag (gtag.js) - Google Analytics