1、JS有几种数据类型,其中基本数据类型有哪些!
七种数据类型
- Boolean
- Null
- Undefined
- Number
- String
- Symbol (ECMAScript 6 新定义)
- Object
(ES6之前)其中5种为基本类型:string
,number
,boolean
,null
,undefined
,
ES6出来的Symbol
也是原始数据类型 ,表示独一无二的值
Object
为引用类型(范围挺大),也包括数组、函数
2、原型和原型链
创建一个函数就会为其创建一个prototype属性,指向这个函数的原型对象,原型对象会自动获得constructor属性,指向prototype属性所在函数。
当一个对象调用某个方法或者属性的时候,先在自身查找,如果找到就调用,如果没有就顺着__proto__到原型对象中查找,如果还没有就继续去原型的原型中查找,一直到null,这样形成一条链叫做原型链。如果还没有找到就返回undefined。
3、继承
(1)原型链继承
(2)构造函数继承
(3)组合继承
4、作用域和闭包
作用域其实可理解为该上下文中声明的 变量和声明的作用范围。
闭包属于一种特殊的作用域,称为 静态作用域。它的定义可以理解为: 父函数被销毁 的情况下,返回出的子函数仍然可以继续访问到父级的变量对象,这样的函数称为闭包。
-
闭包会产生一个很经典的问题:
- 多个子函数的
[[scope]]
都是同时指向父级,是完全共享的。因此当父级的变量对象被修改时,所有子函数都受到影响。
- 多个子函数的
-
解决:
- 变量可以通过 函数参数的形式 传入,避免使用默认的
[[scope]]
向上查找 - 使用
setTimeout
包裹,通过第三个参数传入 - 使用 块级作用域,让变量成为自己上下文的属性,避免共享
- 变量可以通过 函数参数的形式 传入,避免使用默认的
5、call和apply、bind
首先要了解this的指向问题:
(1)this的指向不是在函数定义时确定的,而是在函数调用时确定,this默认情况下指向window,严格模式下为undefined
(2)使用new 调用构造函数时,构造函数内的this 指向新创建的对象
(3)通过 出call/apply/bind方法显式调用函数时,函数内this 指向指定的对象(第一个参数)
(4)通过上下文对象A调用函数时,函数内this指向对象A
var obj = {
name: '橘子君',
fn: function () {
console.log(this);
}
}
obj.fn();// 输出:{name: "橘子君", fn: ƒ}
(5)箭头函数本身并不存在this,
箭头函数的this的指向由它的外层作用域来决定的(指向外层作用域的this)
再来看call和apply、bind
作用:在函数调用时改变函数的执行上下文也就是this的值指向
区别:call采用不定长的参数列表,而apply使用一个参数数组。
call: fn.call(target, 1, 2)
apply: fn.apply(target, [1, 2])
bind: fn.bind(target)(1,2)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!