-
函数自调用
//一次性函数----声明的同时直接调用 (function f1(形参){ var num=10;//局部变量 console.log("jajaja"); })(实参);
-
函数----对象
//函数一定是对象,但对象不一定是函数 //对象中一定有__proto__原型 //函数中一定有prototype原型 function f1(){ } console.dir(f1); console.dir(Math);//是对象,有__proto__原型,不是函数,没有prototype原型 //对象中应该有__proto__原型,函数中应该有prototype原型 function f2(name){ this.name=name; } console.dir(f2);//是对象 //所有的函数实际上都是Function的构造函数创建出来的实例对象 console.log(f1.__proto__==Function.prototype);//true console.log(Function); //数组中的函数调用 //数组可以存储任何类型的数据----函数也是数据类型 var arr=[ function () { console.log("开心"); }, function () { console.log("快乐"); }, function () { console.log("健康"); }, function () { console.log("安全"); } ]; //回调函数 arr.forEach(function (ele) { ele(); });
-
函数中几个成员
function f1(x,y){ if(x>20){ return 1; } console.log(f1.name);//函数名 console.log(f1.arguments.length);//实参个数 console.log(f1.length);//形参个数 console.log(f1.caller);//调用者 //arguments.callee()是一个指向正在执行的函数的指针 console.log(arguments.callee(2*x,y)); return x+y; } f1(10,20);
-
if-else语句中的函数
// 函数声明
// if(true){
// function f1(){
// console.log("好困");
// }
// }else{
// function f1(){
// console.log("不困");
// }
// }
// f1();
//函数声明如果放在if-else语句中,在IE8浏览器中会出现问题
//函数表达式
var ff;
if(true){
ff=function (){
console.log("好困");
}
}else{
ff=function (){
console.log("不困");
}
}
ff();
//用函数表达式就是正确的
- 函数中this的指向
/**
* 函数中this的指向
*
* 普通函数中this是谁--------window
* 对象.方法中的this是谁-------当前实例对象
* 定时器方法中的this是谁--------window
* 构造函数中的this是谁-------实例对象
* 原型对象方法中的this是谁-------实例对象
*
*/
//严格模式
"use strict";
function f2(){
console.log(this);//undefined
}
f2();
function f1(){
console.log(this);//window
}
window.f1();
-
作用域和作用域链
//作用域链----层层搜索,直到0级 var num=10;//作用域链,级别 0 function f1(){ var num=20;//作用域链,级别 1 function f2(){ var num=30;//作用域链,级别 2 console.log(num); } f2(); } f1();