持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
-
函数定义的方式
-
函数声明,必须定义函数名:function fun() { console.log(2) }。会有函数声明提升,将函数执行放在定义之前执行也可以
-
函数表达式,将函数赋值给一个变量,可以是一个匿名函数:var fn = function(){ console.log(2) }
-
通过构造函数方法定义函数(函数本身是一种对象):var fun = new Function(‘a’,’b’,var a = “1”;console.log(a + b))。浏览器解析字符串很慢,性能低,不太实用
- 函数声明与函数表达式:函数声明必须有名字;函数声明会函数提升,在预解析阶段就已创建,声明前后都可以调用;函数表达式类似于变量赋值;函数表达式可以没有名字,例如匿名函数;函数表达式没有函数提升,在执行阶段创建,必须在表达式执行之后才可以调用
在提前输出console.log(fn)时,现代浏览器进行的是变量声明提升,所以输出结果为undefined;而低版本浏览器可以进行函数声明提升,所以会输出第二个fn-false,前一个被第二个覆盖了。使用以下方法可以输出fn-true
-
-
函数调用方式:
-
普通函数内部的this默认指向的是window
-
构造函数内部的this默认指向的是将来创建的实例对象
-
对象中的方法内部的this,默认指向的是调用的对象自己,比如o
-
事件函数内部的this默认指向的是触发事件的事件源
- 定时器和延时器内部的this默认指向的是window
注意:this的指向是要联系执行的上下文,在调用的时候,是按照什么方式调用的,指向是不一样的
-
-
apply()方法与call()的区别是,apply()只有两个参数,第二个参数是函数组成的数组,两者的参数都可以执行函数
-
bind()方法第二个参数及以后的参数可以传参,但是不能执行函数,返回值也不是函数自己的返回值,而是一个新的指定了this的函数,也可以叫绑定函数
-
call()方法调用一个函数,其具有有一个指定的this值和分别提供的参数(参数的列表)
-
注意:该方法的作用和apply()方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组
语法:fun.call(thisArg,arg1,arg2,arg3,…)
thisArg:在fun函数运行时指定的this值。如果指定了null或者undefined,则内部this指向window。arg1,arg2值参数列表
-
call方法:函数本身是一种对象,就能够有自己的属性和方法,call方法本身是一种执行函数的方法
- 功能:更改函数内部的this指向;调用函数执行内部代码
fn.call(o,3,4)第一个参数用来指定this,第二个及以后,就是传的实参
-
call()方法的应用
-
apply()方法的应用
-
bind()方法的应用:常用于定时器延时器中,不立即执行函数的情况