We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
总结一些js 基础相关知识点,收集网上分析透彻的文章,希望通过整理的文章,对JavaScript有一个全面深刻的认识。当然,这些基础,也是面试过程中非常容易被问到的,有空拿出了回味一下,也许会有意想不到的效果。
以下知识点分类,许多都有共同交叉的地方,尽量全部都通读一遍,才能更加深入理解
ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。定义变量时使用var关键字。5种基本数据类型:Undefined,Null,Boolean,Number和String,3中引用类型:Array,Function,和Object,严格意义上说,三种都可以归纳为对象
正因为JavaScript的松散类型,参数传递也变得复杂,但是都可以看成按值传递,分别细分为传递的是变量本身还是引用,这里和变量类型一起讲解,可以加深对js中变量类型的理解。
在面向对象编程中,this的指向非常重要,从一个角度上看,它的值取决于调用的模式.this到对象的绑定,发生在函数被调用的时候,称为 延迟绑定。有一种通俗的解释,谁调用它,this就指向谁。
作用域(scope)可以理解为不同变量和函数的访问范围,JavaScript 中全局作用域 ,局部作用域,在不同场景下生成不同的作用域,可以理解为函数外部的为全局作用域,函数内部的为局部作用域。
提及到了闭包的概念,内层函数能够访问外层函数的变量,形成了闭包,可以用来实现每个模块都有属于自己的作用域,不互相影响,间接实现了私用变量(private varibale)
虽然都提倡尽可能延迟声明变量,但JavaScript中缺少块级作用域,所以尽量在函数体顶部声明即将用到的所有变量
JavaScript 中 上下文(context)指的是this的值,而执行上下文(execution context)涉及到作用域的概念而不是上下文,JS 单线程语言,每次只能一个任务。刚开始执行上下文中默认会添加进去全局,遇到每个函数都会创造一个属于自己的执行上下文。
this
执行上下文的代码被分为两个基本的阶段来处理: 进入执行上下文 和 执行代码
执行上下文与变量关系密切。 变量自己应该知道它的数据存储在哪里,并且知道如何访问,这种机制称为变量对象(variable object)
变量对象(缩写为(VO))是一个与执行上下文相关的特殊对象,它存储着在上下文中声明的以下内容(详细解释看看下面的第一篇文章): 1,函数的形参,2,函数声明(FunctionDeclaration,缩写为FD),3,变量声明(var,变量声明) 全局上下文中的变量对象就是全局对象自己,函数上下文中变量对象是不能直接访问的,由活动对象(activeation object,缩写为AO)扮演VO的角色 在全局上下文中,
global = { Math:<...>, String:<...>, ... window:global // 引用自身 }
在函数上下文中,
AO= { arguments:<Argo> }
在进入执行上下文,涉及到变量声明和函数声明的问题。在变量声明时,如果变量名称跟已经声明的形式参数或函数相同,则声明不会干扰已经存在的这类属性,相反的,函数声明创建时,如果变量对象已经存在相同名称的属性,则完全替换这个属性。 从此可以看出函数声明提升的优先级要高于变量声明提升。
包括了 三种方法的应用场景,每种方法对改变函数内部的this上下文指向和传递给函数参数的方式不同。
setTimeout配合 Promise 完美的封装异步操作,在循环的setTimeou 回调中,如何利用闭包传递变量.理解JavaScript中堆栈中任务优先执行,消息队列中的任务等待同步任务执行完成后才开始执行。
围绕setTimeout的面试题,同时可以考察对变量作用域,闭包,IIFE,异步队列任务,js执行顺序,单线程等,所以下面列出了面试题为主的文章
"prototype“属性值是一个对象,它用来实现继承和共享属性,对象__proto__属性的值就是它所对应的原型对象。
最原始的几个对象: Object.prototype是JavaScript中原始对象,所以Object.prototype.__proto__为null。为了构建各种类型的函数,产生了另一个原始对象Function.prototype。 所以object,Function,String,Number,Boolen',Array等等的__proto__都是 Function.prototype。 通过instanceof验证下 Array instanceof Function 为 true. 知乎上有一张图,非常生动描述了上面的关系;
Object.prototype
Object.prototype.__proto__
null
Function.prototype
object
Function
,
Array
instanceof
Array instanceof Function
true
每个JS对象一定对应一个原型对象,并从原型对象继承属性和方法 判断的时候,通常会用到instanceof运算符,来测试一个对象在其原型链中是否存在一个构造函数的prototype属性
prototype
Object instanceof Object // logs true
Object instanceof Object
Function构造函数本身也算是Function类型的实例吗? Function.__proto__===Function.prototype // logs true
Function.__proto__===Function.prototype // logs true
...
看完上面的概念,基本对JavaScript有了大致掌握,下面可以通过几道题目,考察下情况。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
以下知识点分类,许多都有共同交叉的地方,尽量全部都通读一遍,才能更加深入理解
变量类型与函数中的参数传递
正因为JavaScript的松散类型,参数传递也变得复杂,但是都可以看成按值传递,分别细分为传递的是变量本身还是引用,这里和变量类型一起讲解,可以加深对js中变量类型的理解。
this
作用域
提及到了闭包的概念,内层函数能够访问外层函数的变量,形成了闭包,可以用来实现每个模块都有属于自己的作用域,不互相影响,间接实现了私用变量(private varibale)
虽然都提倡尽可能延迟声明变量,但JavaScript中缺少块级作用域,所以尽量在函数体顶部声明即将用到的所有变量
执行上下文
执行上下文的代码被分为两个基本的阶段来处理:
进入执行上下文 和 执行代码
执行上下文与变量关系密切。
变量自己应该知道它的数据存储在哪里,并且知道如何访问,这种机制称为变量对象(variable object)
变量对象(缩写为(VO))是一个与执行上下文相关的特殊对象,它存储着在上下文中声明的以下内容(详细解释看看下面的第一篇文章):
1,函数的形参,2,函数声明(FunctionDeclaration,缩写为FD),3,变量声明(var,变量声明)
全局上下文中的变量对象就是全局对象自己,函数上下文中变量对象是不能直接访问的,由活动对象(activeation object,缩写为AO)扮演VO的角色
在全局上下文中,
在函数上下文中,
在进入执行上下文,涉及到变量声明和函数声明的问题。在变量声明时,如果变量名称跟已经声明的形式参数或函数相同,则声明不会干扰已经存在的这类属性,相反的,函数声明创建时,如果变量对象已经存在相同名称的属性,则完全替换这个属性。
从此可以看出函数声明提升的优先级要高于变量声明提升。
call,apply and bind
js 异步 回调操作
围绕setTimeout的面试题,同时可以考察对变量作用域,闭包,IIFE,异步队列任务,js执行顺序,单线程等,所以下面列出了面试题为主的文章
prototype、_proto_、原型链
最原始的几个对象:
Object.prototype
是JavaScript中原始对象,所以Object.prototype.__proto__
为null
。为了构建各种类型的函数,产生了另一个原始对象Function.prototype
。所以
object
,Function
,String,
Number,
Boolen',Array
等等的__proto__都是Function.prototype
。通过
instanceof
验证下Array instanceof Function
为true
.知乎上有一张图,非常生动描述了上面的关系;
每个JS对象一定对应一个原型对象,并从原型对象继承属性和方法
判断的时候,通常会用到
instanceof
运算符,来测试一个对象在其原型链中是否存在一个构造函数的prototype
属性Object instanceof Object
// logs trueFunction构造函数本身也算是Function类型的实例吗?
Function.__proto__===Function.prototype // logs true
...
练习题
The text was updated successfully, but these errors were encountered: