首页 > 试题广场 >

以上 JavaScript 代码执行后, 浏览器 alert

[单选题]
var color = 'green';
var test4399 = {
    color: 'blue',
    getColor: function(){
        var color = "red";
        alert(this.color);
    }
}
var getColor = test4399.getColor;
getColor();
test4399.getColor();
以上 JavaScript 代码执行后, 浏览器 alert 出来的结果分别是
  • undefined,red
  • green,blue
  • undefined,blue
  • green,undefined
  • blued,undefined
推荐
B
1.getColor()  var getColor = test4399.getColor;即var getColor = function(){var color = "red";alert(this.color);};执行getColor()函数时this指向的window,因为window.color为green,所以弹出green
2.test4399.getColor(),此时this指向的是test4399,test4399.color为blue,所以弹出blue
编辑于 2017-03-19 12:06:12 回复(6)
知识点一:js函数调用时加括号和不加括号的区别.不加括号相当于把函数代码赋给等号左边,加括号是把函数返回值赋给等号左边.参考https://www.zhihu.com/question/31044040
知识点二:js中this的用法,this总是指向调用它的对象,倒数第二行的getColor为windows调用的,倒数第一行的getColor是test4399对象调用的.参考http://www.cnblogs.com/painsOnline/p/5102359.html
发表于 2017-03-04 13:16:01 回复(8)
B
getColor();相当于普通的函数调用,此时this指向window,this.color应该为全局变量的值
test4399.getColor();此时this指向调用函数的对象test4399,因此this.color应该为对象的属性值
发表于 2016-12-26 21:43:31 回复(0)
发表于 2017-07-05 00:32:20 回复(1)
这题的重点只是this关键字的用法,指向运行时的对象,而不是定义时的对象,表示函数的运行时。 作为总结: 1、函数作为对象的方法被调用,this指向调用者! 2、用于构造函数,this指向新对象 3、ES6的箭头函数,箭头函数不会创造块作用域,无法生成一个独立的环境,this指向上层的this
发表于 2017-05-17 01:05:35 回复(0)
全局作用域(window)下有一个属性color=green,一个方法function(){var color = "red";alert(this.color);}
对象test4399有一个属性color=red,一个方法function(){var color = "red";alert(this.color);}

window.getColor();//调用window对象的方法,输出的时window对象的color属性
test4399.getColor();//调用test4399对象的方法,输出的时test4399对象的color属性

注意:函数内部的  var color = "red" 语句只是声明了一个变量,并不是window  /  test4399 对象的属性。
发表于 2019-04-03 10:51:45 回复(2)
记住一点。this始终指向调用它的对象就行了
发表于 2018-09-10 20:56:13 回复(1)
很多人迷茫为什么red没有把green覆盖,因为用了var是局部变量,如果没有用才会向上寻找color赋值。this指向window所以与red扯不上
发表于 2017-05-24 12:21:20 回复(0)
如果alert里的this取消掉,变成alert(color),结果将是两个red
发表于 2019-03-13 11:26:29 回复(0)
1. var getColor = test4399.getColor; 
这句话中,test4399.getColor代表的是test4399对象里的方法getColor(). 而且等号左边的getColor是个全局变量,所以执行完这句话之后,变成全局函数getColor()。所以,this指向全局变量color,即green。
2. test4399.getColor();
最后一句话,注意,是带括号的,所以意思是执行test4399对象里的方法getColor()。所以,此时的this指向的是对象test4399,而test4399的color是blue,所以第二次打印的是blue。
■this的用法:
  • 在方法中,this 表示该方法所属的对象。
  • 如果单独使用,this 表示全局对象。
  • 在函数中,this 表示全局对象。
  • 在函数中,在严格模式下,this 是未定义的(undefined)。
  • 在事件中,this 表示接收事件的元素。
  • 类似 call() 和 apply() 方法可以将 this 引用到任何对象。
摘自菜鸟教程

编辑于 2021-07-26 23:02:46 回复(0)
注意 第一行声明的时候 是
var color - 'green';
声明就报错了好吧。题有问题。

发表于 2022-01-20 10:29:47 回复(0)
就我看到的第一行是var color - 'green'??
发表于 2021-11-23 17:16:00 回复(0)
不应该是C吗,var color - 'green';这是个减号好吧,不是复制号
发表于 2021-10-22 17:24:06 回复(1)
this永远指向最后调用它的对象,跟this定义的位置无关。
发表于 2019-10-02 19:08:14 回复(0)
getColor与test4399.getColor指向同一个函数,直接执行getColor()相当于在全局环境执行该函数,this代表全局,故第一次结果为green;
执行test4399.getColor()相当于test4399对象调用函数getColor(),里面this指test4399对象,故结果为blue。
发表于 2019-03-26 19:11:39 回复(0)
在进行验证时如果在<script></script>标签之间添加window.onload=function(){////////},'//////'表示此题的代码,则结果为undefined,blue,此时
var getColor=function(){
    var color='red';
   alert(this.color);   //此处this指向window,而color='green'设置在window.onload这个函数中,故green不是window.color,而window.color没有定义,故打印出来是undefined.
}
这是我犯的一个小错误,,
发表于 2017-03-19 08:57:05 回复(0)
跟es6的箭头函数弄混了
发表于 2017-03-06 19:03:19 回复(0)
this指向:谁调用指向谁,函数直接调用指向的是window也就是green 对象调用指向对象也就是blue
发表于 2022-05-29 09:44:43 回复(0)
this指向问题(this为了解决在对象内部的方法中使用对象内部属性): 
1、全局执行上下文 - 指向window
2、函数执行上下文 - 默认指向为window,严格模式下指向undefined
    函数指向上下文中的this可以根据设置来调整执行上下文的this:
   a、使用call/apply/bind方法进行强绑定调整
   b、new Fn方法改变指向构建的函数
   c、obj.fn  将this指向obj
3、eval执行上下文 - 调用者的执行环境对象

题目中的1、创建了一个新的全局变量赋值,此时的getColor方法是全局的方法,其this指向默认为window  即弹出window.color  为green
2、test4399.getColor() 方式调用,this的指向被调整指向了对象test4399,即弹出 test4399.color  为blue
发表于 2022-05-23 17:29:10 回复(0)
this指向调用该函数的对象 getcolor()相当于window.getcolor() this指向window 这里输出green test4399.getcolor() this指向test4399 这里输出green
发表于 2022-02-18 11:32:35 回复(0)
是不是逆天啊,你var color-green,写的又不是等号,这种逆天题目能不能删了😅
发表于 2022-02-15 12:55:46 回复(0)