小白求救,this和作用域有啥关系

qq_40006299 2018-11-29 05:19:39
第一种,this指向的是a对象 <html>
<script>
var name = "111";
var a = {
name : "123",
b : function (){
console.log(this.name);//123
}
}

a.b();

</script>
</html> 第二种,this指向的是window <html>
<script>
var name = "111";
var a = {
name : "123",
b : this.name
}

console.log(a.b);//111

</script>
</html> 不是说哪个对象调用的就是谁的this吗,为啥还和作用域扯上关系了
...全文
330 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzz5299087 2018-11-29
  • 打赏
  • 举报
回复
1.this在全局作用域下使用 ,this都指向window
2.this只有在局部作用于也就是函数中的时候,this指向调用它的对象
所以,第一中情况下,a.b(),b是个function,被a 对象调用的时候,this就是a
第二中情况,在全局作用域下 a 对象中的this,就指向window.
你也可以这样理解:
var name = "111";
var a = {};
a.name = "123";
a.b = this.name;
console.log(a.b);//111
H_duolalu 2018-11-29
  • 打赏
  • 举报
回复
第一个是调用函数 所以指向a 第二个是访问a的b这个属性,不是调用函数
天际的海浪 2018-11-29
  • 打赏
  • 举报
回复
this和作用域没什么关系。this一般只在函数内使用,是函数所操作的对象。 函数内this的值是在函数调用时才确定的,函数的调用方式不同,this也就不同。 func是一个函数 1,当函数直接调用时 func(); 函数内this的值是window对象,(在js严格模式"use strict";下,函数内this的值是null) 2,当把这个函数赋值给一个对象的方法obj.abc = func; 调用obj.abc()时,函数内this的值是obj对象,也就是函数所在的对象。 3,当把这个函数赋值给一个dom元素的事件 document.getElementById("id").onclick= func; 在事件触发时,函数内this的值是触发事件的那个dom元素。 4,当把这个函数作为构造函数使用时 new func();函数内this的值是一个新创建的对象。 5,当函数以 func.call(obj); 或 func.apply(obj); 方式调用时, 函数内this的值是call()或apply()方法的第一个参数。 6,当用 func2 = func.bind(obj); 返回一个新的函数。 不论func2函数用什么方式调用,函数内this的值永远都是bind()方法的第一个参数。 7,如果func是一个箭头函数 (x)=>{} ,箭头函数内没有自己的this。 如果在箭头函数内使用this,访问的是外层函数的this。 而你的第二种代码this在函数外(全局环境)使用等同于 1 的情况。

87,916

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧