函數(shù)
- 函數(shù)聲明和函數(shù)表達式
function fn(){...}//函數(shù)聲明,具有提升作用魂迄,執(zhí)行代碼之前就會先讀取萧吠。
var fn = function(){...}//函數(shù)表達式
*函數(shù)中的幾個屬性
- arguments 在node.js中為{0:value1....構成的
下標-參數(shù)
鍵值對}
(function(){
console.log(arguments);{ '0': 'a', '1': 'b', '2': 'c', '3': 'd' }
})('a','b','c','d');
- arguments.length象浑,實際參數(shù)的個數(shù)
(function(){
console.log(arguments.length);//4
})('a','b','c','d');
- arguments.callee
(function(){
console.log('arguments.callee',arguments.callee);
})('a','b','c','d');
/*運行結果,指向函數(shù)自身
function (){
console.log('arguments.callee',arguments.callee);
}*/
- arguments.call.caller || fn.caller
function inner(){
console.log('caller',inner.caller);
}
function outter(){
inner();
}
/*
函數(shù)調用者的父環(huán)境outter()
*/
this
作為對象方法調用 = 指向調用對象
函數(shù)調用 = 指向全局對象
作為構造函數(shù) = 指向所創(chuàng)建的實例塊級作用域
javscript不存在塊級作用域按厘,可以使用如下方式模擬
(function(){
//code....這里面都是塊級作用域
})()
- 閉包
1构捡、函數(shù)內部嵌套函數(shù)
2偷俭、保留函數(shù)執(zhí)行環(huán)境的所有活動對象,常駐內存浦箱,不會被回收
//局部變量實現(xiàn)累加
function add(){
var i=0;
return function(){
return ++i;
}
}
var add=add();
console.log(add());//1
console.log(add());//2
console.log(add());//3
console.log(add());//4
name='globa'
var o={
name:'my object',
getName:function(){
var that=this;//保存了指向o這個對象的信息,并未被回收
return function(){
console.log(that.name);
}
}
}
o.getName()();//my object
name='globa'
var o={
name:'my object',
getName:function(){
return function(){
console.log(this.name);//最終this成為了普通的函數(shù)調用制妄,故指向全局
}
}
}
o.getName()();//globa
function createFns(){
var fns=[];
for(var i=0;i<5;i++){
fns.push(function(){
console.log(i);
});
}
return fns;
}
createFns().forEach(function(fn){
fn();
})//5 5 5 5 5
function createFns(){
var fns=[];
for(var i=0;i<5;i++){
fns.push((function(i){
return function(){
console.log(i);
}
})(i))
}
return fns;
}
createFns().forEach(function(fn){
fn();
})//0 1 2 3 4