Skip to main content

Javascript教程第八章:函数

Javascript教程第八章:函数

一.函数

1.函数声明的多种方式

2.全局函数定义特点

在全局定义的函数,默认会压入window中,但如果跟window中的默认方法重名,那么会造成默认函数被覆盖,显然这样是不合适的

3.立即执行函数与块作用域解决冲突

问题:引用多个外来插件的时候,出现了函数同名的冲突 解决方案: (1)老办法:写一个立即执行函数,将函数全部放在函数作用域中 (2)新办法:模块化

4.用递归实现求和

function sum(...args){
if(args.length == 0){
return 0;
}
每次弹出一个值,与下一次弹出的值进行相加
return args.pop() + sum(...args);
}

//三元表达式简写
function sum(...args){
return args.length == 0 ? 0 : args.pop() + sum(...args);
}
console.log(sum(3,1,2,5));

5.i++和++i的区别

  • i++:先赋值后自加改变值
  • ++i:先自加再赋值

6.什么是回调函数

可以简单的理解为在一个函数中调用的函数

7.函数与方法中this的不同

  • 在全局函数中,this等于window,而当函数被作为某个对象的方法

  • (在对象中的函数一般叫做方法)

  • 调用时,this默认指向该对象。匿名函数的执行环境具有全局性,因此通常this指向window

name = "Window.name"
function show(name){
this.name = name;
console.log(this.name);
}
show("lisi"); //lisi

let obj = {
name : "obj.name",
show(){
console.log(this);
}
}
obj.show(); //obj

举例:

let lesson = {
site:"后盾人",
lists : ["js","css","php"],
show:function(){
console.log(this);
//由于将函数赋值给了变量,所有这个this指向lessons

return this.lists.map(function(value){

//由于map中的function是个普通函数,所以在该函数中this指向的是全局
console.log(this);
})
}
}
lesson.show();

8.箭头函数带来的this的变化实例*

使用箭头函数之后,函数中的this等于父级作用域中的this

注意:addEventListener(event,function())中的回调函数相当于调用Ele.onEvent = function(),所以此时的回调函数其实是Ele的一个属性,this同方法中的this而不指向window

76.this的构造原理实现

call()和apply()的区别

call用逗号隔开多个参数,apply用数组传递多个参数

let lisi = {
name:"李四"
}
let wangwu = {
name : "王五"
}
function User(web,url){
console.log(this.name);
}
User.call(lisi,"后盾人","houdunren.com") //无需调用,立即执行,输出李四
User.apply(lisi,["后盾人","houdunren.com"])
//起初函数中的this为空{}

function User(name){
this.name = name;
}
let lisi = new User("李四")
console.log(lisi);

//当我们想要改变this,让他起初不为空的时候
let hd = { url : "hdcms.com" }
User.call(hd,name)

第一个参数为需要改变this的对象值,第二个参数为User构造中的name参数

77.bind()使用方法

bind()与call()和apply()方法大同小异,call和apply在调用后立即执行,而bind不会执行,得到一个新的函数