【前端学习】javascript作用域(链)和this
来源:互联网 发布:抓取淘宝订单数据 编辑:程序博客网 时间:2024/05/04 18:14
前言
要想学好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); //obj1fn.apply(obj2); // obj2var fbn = fn.bind(obj2); //生成一个指定了this的函数fbn(); //obj2 this是obj2fbn.apply(obj1); //obj2 apply不能改变已经绑定了this的this值
参考文章
理解javascript作用域和作用域链
详解this
javascript中this对象详解
- 【前端学习】javascript作用域(链)和this
- javascript 函数和作用域(函数,this)(六)
- javascript 函数和作用域(函数,this)(六)
- javascript 函数和作用域(函数,this)(六)
- javascript 函数和作用域(函数,this)(六)
- javascript 函数和作用域(函数,this)(六)
- javascript 函数和作用域(函数,this)(六)
- JavaScript之函数和this作用域
- javascript作用域和闭包,this
- 作用域学习--------this
- javaScript中的this作用域
- 作用域和 this
- 理解javascript原型和作用域系列之this说明
- javascript--作用域,声明提前和this关键字总结
- 【Web前端】javascript作用域
- 前端面试之---javascript作用域和闭包
- JavaScript(面向对象+原型理解+继承+作用域链和闭包+this使用总结)
- JavaScript深入浅出————函数和作用域(函数,this)(六)
- 地图的基础使用
- 最小生成树之prim算法
- 使用 TestLink 进行测试管理
- UIScorollView运用与属性详解
- UESTC 1712 Easy Problem With Numbers 除法对和数取模,分解,线段树
- 【前端学习】javascript作用域(链)和this
- NSUserDefaults
- Java 安全套接字编程以及 keytool 使用最佳实践
- 水平集方法在图像处理中的应用
- 阅读笔记7 loaders-1
- 有关链表的认知
- CYC-爱心暖暖的小动画
- fcntl文件锁
- 测试知识点