JS 函数的声明和调用

2019-11-16  本文已影响0人  为什么要简称

函数的定义方式

1.自定义函数(命名函数)

funtion fn(){};

2.函数表达式(匿名函数)

var fun = funtion fn(){};

3.使用new Funtion('p1', 'p2', '函数体')

//函数体用字符串的形式写入
var f = new Funtion('p1', 'p2', 'console.log(p1+p2)');
f(1, 2)

所有函数都是Funtion的一个实例(对象)
函数也是一种对象

函数的调用方式

1.普通函数

funtion fn(){ console.log('nihao')};
//调用
fn();
//或者
fn.call()

2.对象的方法

var x = {
  sayHi:funtion(){
    console.log('nihao');
  }
}
//调用
x.sayHi();

3.构造函数

funtion Star(){};
//调用
new Star();

4.绑定事件函数

btn.onclick = function(){};
//点击按钮进行调用

5.定时器函数

setInterval(funtion(){}, 1000);

6.立即执行函数

(funtion(){
  console.log('nihao');
})();

this的指向问题

this的指向是当我们调用函数的时候确定的,调用方式的不同决定了this的指向不同
调用方式           this指向
普通函数调用         window(普通函数是window调用的)
构造函数调用         实例对象,原型对象里面的方法也指向实例对象
对象方法调用         该方法所属对象
事件绑定方法         绑定事件的对象
定时器函数           window
立即执行函数         window

改变函数内部this的指向

JavaScript提供了一些函数方法帮我们更优雅的处理函数内部的this指向问题,常用的有bind()、call()、apply()三个方法

1.call方法
var t = {
  name:'tom'
}

funtion fn(){
  console.log(this);
}

fn.call()  //这时候fn函数中的this指向window

fn.call(t)  //这时fn函数中的this指向了t对象

这个特性可以用在继承中

funtion Father(uname , age){
  this.uname = uname;
  this.age = age;
}
funtion Son(uname, age){
  //通过call函数将father中的this指向了son
  //son继承了father的构造函数,拥有了uname和age这两个属性
  Father.call(this, uname, age);
}

2.apply方法

apply()和call()作用一样(参数不同),可以调用一个函数,简单理解为调用函数的方式,但是它可以改变函数的this指向
fun.apply(thisArg, [argsArray]) (参数必须是数组(伪数组))
apply主要应用在数组方面

//数组中没有求最大最小值的方法,但是Math中有
//可以使用apply方法实现
var arr = [1, 2, 3, 4, 1];
var max = Math.max.apply(Math, arr);
var min = Math.max.apply(Math, arr);
console.log(max, min);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
3.bind方法

bing()方法不会调用函数,但是可以改变函数内部this的指向
fun.bind(thisArg, arg1, arg2, ...)
返回原函数改造后的一个拷贝

上一篇下一篇

猜你喜欢

热点阅读