一道有关作用域的题目。

先来看段代码:

var name = ‘this window‘;

var object = {

        name : "My Object",
        getNameFunc: function () {
            return function () {
                alert(this.name);
            }
        }
    }
    var a = object.getNameFunc();
    a() ;

答案是:’this window‘。有点出乎意料,这个this明明在object里,为什么打印出来是this window而不是My Object呢?

作用域是在函数定义时确立的,在一个函数内部还存在一个函数时,初次只会定义最外层的函数,内部的函数只会在外部函数执行的时候才会定义。而外部函数执行时 var a = object.getNameFunc();由于闭包内部函数被脱离了本来应该有的上下文,回到了全局作用域。所以此时this指向window。

时间: 2024-10-09 06:54:27

一道有关作用域的题目。的相关文章

约瑟夫环问题,一道经典的数据结构题目

问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号. 一般我们采用一个循环队列来模拟约瑟夫环的求解过程,但是如果n比较大的时候,采用模拟的方式求解,需要大量的时间来模拟退出的过程,而且由于需要占用大量的内存空间来模拟队列中的n个人,并不是一个很好的解法. 在大部分情况下,我们仅仅需要知道最后那个人的编号,而不是要来模拟一个这样的过程,在这种情况下,可以考虑是否存在着一种数学公式能够直接求出最后那个人的编号. 我们知道第一个人(编号

转换二进制数(这是一道竞赛形式的题目)。

1. 题目介绍 转换二进制数(这是一道竞赛形式的题目). 时限:3s输人文件: change.in 一串串太多太长的二进制数真是枯燥乏味,难怪小明看着看着就看花眼了;小亮看着看着就睡着了;小晶看着看着就恐慌起来了,仿佛自己变成了机器人,原本丰富多彩的世界一下子成了0和1的汪洋大海.他们一致要求将这些二进制数转换成十进制数,只有这样,心里才安稳,才痛快,睡觉才合得上眼. 这项工作自然就落到你的手里了,因为早就听说你是处理二进制数的高手了,一点也不怀疑你会一下子想出十七八种转换的方法,而且其中还有几

一道简单的动态规划题目——House Robber

一.题目 House Robber(一道Leetcode上的关于动态规划的简单题目)具体描述如下: There is a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent hous

一道有意思的JavaScript 题目

今天在网上看到一道题,觉得很有意思就把它抄下来解了.题目是这样的: 1 function Parent() { 2 this.a = 1; 3 this.b = [1, 2, this.a]; 4 5 this.c = { demo: 5 }; 6 this.show = function () { 7 console.log(this.a , this.b , this.c.demo ); 8 /* alert(this.b);*/ 9 } 10 } 11 function Child() {

还是一道旋转数组的题目

 /*  关于这 数组偏移  1 2 3 4 5   3---->>   3 4 5 1 2  n =5  返回 2  */   #include <bits/stdc++.h> using namespace std;  int a[]={1,2,3,4,5};  int n=5;  int count=3; int fun(int n,int a[],int count,int len)//不给数组长度真的不好做 ,JAVA是能由数组直接拿 {      int b[2*len

问一道指针对象的题目

j3cd04岩赋欣刀镜咐<http://weibo.com/20180413p/230927983101459811803136> 91vk3q盅秘扒柏共状<http://weibo.com/p20180413Pp/230927983240056867135488> hp3s92畔掏优赜说斗<http://weibo.com/p20180413Pp/230927983232672035774464> ifb03c兄婪霖湍剐致<http://weibo.com/Am

OJ:一道考察多态的题目

Description 下面程序的输出结果是: A::Fun C::Do 程序代码 #include <iostream> using namespace std; class A { private: int nVal; public: void Fun() { cout << "A::Fun" << endl; } void Do() { cout << "A::Do" << endl; } }; cl

一道很简单的题目--不同的写法

写这道题目的意图呢是简单的总结下链表的使用,还有注意的事情 First 比较简单的写法,直接比较大小,不保存数据 int main() { int max = 0, sou; while (1) { printf("输入成绩\n"); scanf("%d", &sou); if (max < sou) { max = sou; } if (sou < 0) { break; } } printf("最大值是%d", max);

从一道题目看类加载

有一道非常经典的题目,如果对虚拟机加载类的过程不熟悉,很容易就答错,题目如下: public class Singleton { public static Singleton instance = new Singleton(); public static int a; public static int b = 0; private Singleton() { a++; b++; } public static Singleton getInstance() { return instan