提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1.函数-创建方式
(1)函数声明表达式
function fn1(){
}
(2)函数定义表达式
程序:
var fn2=function(){
}
console.log( fn2,typeof fn2 );
var obj={
fn3:function(){}
}
console.log( obj.fn3,typeof obj.fn3 );
运行结果:
(3)立即调用函数,不能让function 开头,调用完即刻销毁
程序:
(function fn4(){
console.log( fn4 );
console.log("hello world");
})()
// fn4()//报错
!function fn5(){
console.log( fn5 );
console.log("nice to meeet you");
}()
var fn6=function(){
console.log("test");
console.log(fn6);
return 100;
}()
console.log(fn6);
运行结果:
2、函数-函数的方法
call 和 apply 就是为了改变函数体内部 this 的指向。
call 和 apply二者的作用完全一样,只是接受参数的方式不太一样。
call和apply方法定义
apply
Function.apply(obj,args)
方法能接收两个参数:(1) obj:这个对象将代替Function类里this对象
(2) args:这个是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数。
call
(1) call方法与apply方法的第一个参数是一样的,只不过第二个参数是一个参数列表
(2) 在非严格模式下当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象,在浏览器中则是window
(1)call apply的区别(面试题重点)
(1)函数的call apply 调用函数的同时,通过参数1 修改this
(2)call 接收的实参可以是n 个,其他的每一项实参再被函数的每一项形参接收
(3)apply 接收实参只接收2 个,另一个实参会被解析之后赋值给每一项形参
(4)call 方法中传递参数要求一个一个传递参数, 但是apply 方法要求传递参数是一个数组形式。
(2)案例:应用apply,求数组的最大值
Math.max(100,456,500,200,78);
var arr=[100,300,234,89,78,90,109,340,23,100,300,234]
Math.max(arr); //NaN
Math.max.apply(null,arr); //340
Math.max.call(null,100,300,234,89,78,90,109,340,23,100,300,234); //340
案例:
function Fn1(){
this.name="james";
return "wade";
};
var fn1=new Fn1();
console.log(fn1);
console.log(fn1.name);
function Fn2(){
this.name="james";
return [1,2,3];
};
var fn2=new Fn2();
console.log(fn2);
console.log(fn2.name);
运行结果:
案例:
function f(){return 1;}
console.log(f());
var f=new Function("return 2;");
console.log(f());
var f=function() {return 3;}
console.log(f());
function f(){return 4;}
console.log(f());
var f=new Function("return 5;");
console.log(f());
var f=function(){return 6;}
console.log(f());
运行结果:
(3)call apply的程序应用区别举例
案例1:
function fn(a,b,c){
console.log(a,b,c);
console.log(this);
console.log(this.username);
console.log("good!");
}
var obj={
username:"刘欣"
},obj2={
username:"叶光鑫"
}
fn.call(obj,100,200,300);
fn.call(obj2,"a","b","c");
运行结果:
案例2:
function fn(a,b,c){
console.log(a,b,c);
console.log(this);
console.log(this.username);
console.log("good!");
}
var obj={
username:"刘欣"
},obj2={
username:"叶光鑫"
}
fn.apply(obj,[100,200,300])
fn.apply(obj2,["a","b","c"])
运行结果: