摘要:了解面向对象编程之前,首先要了解的执行顺序。的解析过程分为两个阶段预处理阶段与执行期。在执行阶段的执行上下文对象由赋值为指向对应函数
了解js面向对象编程之前,首先要了解js的执行顺序。js的解析过程分为两个阶段:预处理阶段与执行期。
预处理阶段在预处理阶段,js会首先创建一个执行上下文对象(Execute Context,然后扫描声明式函数和用var定义的变量,将其加入执行上下文环境中,看下面栗子:
var a = 5; b = 1; function f(){} var g = function(){} //执行上下文对象 /*Execute Context{ a: undefined f: 对函数的引用 }*/
从上面可以看出,js在预处理阶段创建了一个预处理对象,将声明式函数和var定义的变量放入其中,这里忽略了没有用var声明的b以及函数表达式 g。
alert(a); // undefined alert(b); // 报错 b in not defined alert(c); // 函数体被打印出来 alert(d); // 报错 var a = 1; b = 5; function c(){ console.log("c"); } var d = function(){ console.log("d"); }
从上面例子的输出结果就可以看出js预处理阶段做了哪些事情,对于没有加进函数变量预处理阶段的变量或函数,会直接报错。
对于冲突解决有两种情况:
处理函数声明有冲突时,会覆盖前面
处理函数变量声明有冲突时,会直接忽略
alert(f); // 弹出function f(){console.log("fff");} function f(){ console.log("ff"); } var f = 10; function f(){ console.log("fff"); }
总结一句话:函数是js里的第一等公民。
执行阶段在执行阶段中,js会先扫描函数声明后扫描变量,然后给预处理阶段中执行上下文对象中的成员赋值,如果没有用var声明的变量,会成为外部执行上下文的成员。
alert(a); alert(f); var a = 1; function f(){} //在执行阶段的执行上下文对象 /*{ a: 1; // 由undefined赋值为1 f: 指向对应函数 }*/
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/86452.html
摘要:的变量作用域是基于其特有的作用域链的。需要注意的是,用创建的函数,其作用域指向全局作用域。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。 作用域 定义 在编程语言中,作用域控制着变量与参数的可见性及生命周期,它能减少名称冲突,而且提供了自动内存管理 --javascript 语言精粹 我理解的是,一个变量、函数或者成员可以在代码中访问到的范围。 js的变量作...
摘要:在构造函数中的中定义的属性和方法,会被创建的对象所继承下来。从上面的输出结果看出,指向了其构造函数的,而本身也是一个对象,其内部也有属性,其指向的是直到最后指向,这条原型链才结束。和都指向,说明原型链到终止。 prototype原型对象 每个函数都有一个默认的prototype属性,其实际上还是一个对象,如果被用在继承中,姑且叫做原型对象。 在构造函数中的prototype中定义的属性...
摘要:类的继承建立继承关系修改的指向调用父类方法调用父类的构造器调用父类上的方法封装命名空间是没有命名空间的,因此可以用对象模拟。参考资料面向对象 面向对象程序设计(Object-oriented programming,OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。——维基百...
摘要:对构造函数使用运算符,就能生成实例,并且变量会绑定在实例对象上。这个对象的所有属性和方法,都会被构造函数的实例继承。 对象 对象的含义 所谓对象,就是一种无序的数据集合,由若干个键值对(key-value)构成。 对象的创建 使用new运算符创建Object var p = new Object(); p.name = Tony; 使用对象字面量的形式 //对象字面量形...
摘要:构造函数通常首字母大写,用于区分普通函数。这种关系常被称为原型链,它解释了为何一个对象会拥有定义在其他对象中的属性和方法。中所有的对象,都有一个属性,指向实例对象的构造函数原型由于是个非标准属性,因此只有和两个浏览器支持,标准方法是。 从这篇文章开始,复习 MDN 中级教程 的内容了,在初级教程中,我和大家分享了一些比较简单基础的知识点,并放在我的 【Cute-JavaScript】系...
阅读 3975·2021-11-18 13:22
阅读 1812·2021-11-17 09:33
阅读 2876·2021-09-26 09:46
阅读 1208·2021-08-21 14:11
阅读 2883·2019-08-30 15:53
阅读 2706·2019-08-30 15:52
阅读 1885·2019-08-30 10:52
阅读 1516·2019-08-29 15:30