javascript - 关于内部函数调用对象的问题
天蓬老师
天蓬老师 2017-04-11 12:29:44
0
7
543
function Person(name){ var name=name; function getName(){ return name; } getName(); } Person("Nicholas"); 在全局作用域中,调用Person("Nicholas")对象是window,那么在Person函数的内部, 调用getName()函数的对象该是谁呢??? 补充: function Person(name){ var name=name; function getName(){ alert(name); } window.getName();//window.getName is not a function } Person("Nicholas");

在这段代码中,我用window调用getName()方法,会报错!window.getName is not afunction ???这是否能够说明,window不能调用该方法呢??

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

reply all (7)
小葫芦

还是window

    刘奇

    。。。全局对象window

      小葫芦
      function Person(name){ var name=name; function getName(){ console.log(this) // window return name; } console.log(getName()); } Person("Nicholas");
        刘奇

        内部函数的 this 也绑定全局对象,这是 JavaScript 的一个缺陷,如果想绑定到其外层函数对应的对象上,可以用 that 替换,代码如下

        var point = { x : 0, moveTo : function(x) { var that = this; var moveX = function(x) { that.x = x; }; moveX(x); } }; point.moveTo(1); console.log(point.x); // 1

        如果不用 that 替换,输出的将是 0,如果对 this 还不够理解,可以查下 MDN
        https://developer.mozilla.org...

          大家讲道理

          函数调用的四种方式:

          1. 直接调用,例如fn(),此时函数内部的this指向全局对象(window)

          2. new构造函数,例如new Person(),此时函数内部的this指向将要实例化的对象

          3. 作为对象方法调用,例如obj.fn(),此时函数内部的this指向obj

          4. 使用call、apply调用,例如fn.call(obj),此时函数内部的this,指向call的第一个参数(obj)

          你的情况属于第一种,所以this指向window

          再补充一点函数作用域,如果在全局作用域中声明的函数或者变量,声明的函数或者变量属于全局对象的属性,但是在函数内声明的变量,其挂载的对象是运行函数的活动对象。

          你声明的getName是在Person内,其挂载在Person的活动对象,所以通过window是无法访问到。

          总结:1. 作用域是由声明时决定的 2. this,arguments等是运行时决定的

            伊谢尔伦

            其实还是window

              巴扎黑
              function Person(name){ var name=name; function getName(){ return name; } getName(); } Person("Nicholas"); 在全局作用域中,调用Person("Nicholas")对象是window,那么在Person函数的内部, 调用getName()函数的对象该是谁呢???

              为什么你会认为Person(Nicholas")是被window调用呢?这里的Persin函数是直接调用,只是浏览器把this绑定到了window,在严格模式,则为undefined;那么getname()也是函数被直接调用了,不存在你说的被谁调用的问题吧

                Latest Downloads
                More>
                Web Effects
                Website Source Code
                Website Materials
                Front End Template
                About us Disclaimer Sitemap
                php.cn:Public welfare online PHP training,Help PHP learners grow quickly!