javascript 函数
❝Function 类型, 因为函数是对象,因此函数实际上也是一个指向函数对象的指针。函数通常使用声明语法定义。
函数创建方式:
- 声明式 function sum(){}
- 函数表达式 var sum = function(){}
js解析器会
❞先读取函数声明,并使其在执行任何代码之前可以访问。而函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。
函数的内部属性
❝普通函数【箭头函数除外】内部 有两个特殊的属性
arguments和this:❞
arguments保存函数参数thisthis引用的是函数执行的环境对象
use strict 模式,未指定环境对象调用函数时,this的值不会是window,除非明确把函数添加到某个对象或者调用apply()或者call(),否则this的值将一直是undefined。- 通过
call()、apply()、bind()方法可以「绑定指定的this.」call()参数是单个单个传,apply()参数是数组形式传callee指向拥有arguments对象的函数,一般阶乘函数会用到。
js普通函数和箭头函数的区别
❝
箭头函数
- 不能作为构造器函数使用,即不能使用new 关键字
- 不能绑定arguments
- 会捕获其所在上下文的this值,作为自己的this值;
- call()、apply()、bind() 不能改变this的指向
- 箭头函数不能使用argumen对象,该对象在函数体内不存在。如果要用,可以用rest参数代替
- 变量提升:由于js的内存机制,function的级别最高,而用箭头函数定义函数的时候,需要var(let、const)关键字,而var所定义的变量不能得到变量提升。故箭头函数一定要定义于调用之前。
- 箭头函数不能使用yield命令,因此箭头函数不能用作genertor函数。
this 指向问题❞
普通函数中,this指向其函数的直接调用者;
- 普通函数的默认绑定规则是:在非严格模式下,默认绑定的this指向全局对象,严格模式下this指向undefined
箭头函数中,
**this指向在定义的时候继承自外层第一个普通函数的this。任何方法都改变不了其指向,如call()、bind()**等;
「被继承的普通函数的this指向改变,箭头函数的this指向会跟着改变」
箭头函数外层没有普通函数,严格模式和非严格模式下它的this都会指向
window(全局对象)
构造函数中,如果不使用new,则this指向window,如果使用new创建了一个实例,则this指向该实例
本文使用 mdnice 排版