【前端学习】javascript作用域(链)和this

前言

    要想学好javascript,理解作用域和this是非常重要的,尤其是this,对刚学习这门语言的新手来说,理解起来绝对是个挑战,但是如果不好好掌握的话,你就没法理解一些代码的意图,因为javascript中的this很诡异。 为了学习这些知识,我除了看书意外,从网上找了一些比较通俗易懂的文章,分享给大家,详细后后面的参考文章。

关于作用域链

    为了了解javascript中变量的检索机制,首先需要掌握作用域和作用域链的知识。关于这些知识,大家还是参考文章后的参考文章,写得非常详细。这里我分享下个人学习的总结和理解:
javascript中作用域是什么?
    作用域是为了控制变量和函数的可访问范围、可见性以及生命周期。 就是在语言解释执行的过程中,针对不同的语法(function、with语句等)开辟一个存储区域,该区域就是一个作用域,该区域里的数据能否被其它内存区域访问,需要按照一定的规则来(javascript语法规则)。

javascript中哪些语法会开辟一个新作用域?
1. 函数(function)
2. with语句
3. try …. catch语句

javascript中作用域链是什么?
    理解代码运行原理的朋友可能知道,代码的执行,首先会在一个被称作“运行环境”的区域的里执行(这环境其实就是个栈),一旦碰见开辟新作用域的语法时,就会在当前环境下又开辟一个“运行环境”(新开辟一个作用域)。当然,当前的“运行环境”是不能访问新创建“运行环境”里的数据,但是新”运行环境“却可以访问当前“运行环境”, 这就相当于 新”运行环境”作用域可以链到当前“运行环境”作用域,从而形成一个类似“链表”的东西。

关于this

    关于this,建议大家一定要好好掌握,多从网络上找相关资料,学习理解,形成自己的知识体系。下面分享一下本人学习总结和理解:
1. 和java编程语言一样, 每个”运行环境”中都有一个this,this可理解成一个对象。
2. 和java不一样的是,java中this是“固定”的,this指的就是当前方法所在的宿主对象,不可改变。而javascript中的this有点不一样,javascript中某个“运行环境”的this可以是任何对象,我们完全可以通过call、applay方法来改变它。当然也可以通过bind方法来生成一个已经指定了this的函数, 指定了this的函数不能通过call或apply来重新设置它的this值。
具体可参照下面代码加深理解:

obj1 = {name:"obj1"} 
obj2 = {name:"obj2"}
name = "global";

function fn() {
 console.log(this.name);
}

fn(); // global 全局this 根据ES实现各不相同 浏览器下是window node下是空对象
fn.apply(obj1); //obj1
fn.apply(obj2); // obj2

var fbn = fn.bind(obj2); //生成一个指定了this的函数
fbn(); //obj2 this是obj2
fbn.apply(obj1); //obj2 apply不能改变已经绑定了this的this值

参考文章

理解javascript作用域和作用域链
详解this
javascript中this对象详解

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值