87,901
社区成员
发帖
与我相关
我的任务
分享
function a(aname){
return function(arg1,arg2){
var kk = arg1[aname];
alert(kk);
}
}
//把匿名函数赋给blm
var blm=a('aname');
//调用匿名函数
blm({aname:'ok'});
//把匿名函数释放,a函数才能释放内存
blm =null;
闭包会携带包含它的函数里面的活动对象,所以函数调用完并不会释放内存,必须释放闭包才行
function sum(num1,num2){
return num1 + num2;
}
alert(sum(10,10)); //20
var anotherSum = sum;
alert(anotherSum(10,10)); //20
sum = null;
alert(anotherSum(10,10)); //20
函数没有重载,同命名函数,后面会覆盖前面的
函数声明与函数表达式
解析器在向执行环境中加载数据时,会率先读取函数声
明在执行任何代码之前可用.而函数表达式,则必须等到
解析器执行到它所在代码行,才会真正被解释执行.
alert(sum(10,10)); //20
function sum(num1,num2){
return num1 + num2;
}
alert(sum(10,10)); //错误
var sum = function(num1,num2){
return num1 + num2;
};
作为值的函数
因为js中的函数名本身就是变量,所以可以作为值来使
用.
function a(ag){
return ag+10;
}
function b(ag){
return ag;
}
alert(b(a(10))); //20
function callSomeFunction
(someFunction,someArgument){
return someFunction(someArgument);
}
function add10(num){
return num + 10;
}
var re = callSomeFuntion(add10,10); //add10不加
()不会执行
alert(re); //20
function sum(num1,num2){
return num1 + num2;
}
alert(sum(10,10)); //20
var anotherSum = sum;
alert(anotherSum(10,10)); //20
sum = null;
alert(anotherSum(10,10)); //20
函数没有重载,同命名函数,后面会覆盖前面的
函数声明与函数表达式
解析器在向执行环境中加载数据时,会率先读取函数声
明在执行任何代码之前可用.而函数表达式,则必须等到
解析器执行到它所在代码行,才会真正被解释执行.
alert(sum(10,10)); //20
function sum(num1,num2){
return num1 + num2;
}
alert(sum(10,10)); //错误
var sum = function(num1,num2){
return num1 + num2;
};
作为值的函数
因为js中的函数名本身就是变量,所以可以作为值来使
用.
function a(ag){
return ag+10;
}
function b(ag){
return ag;
}
alert(b(a(10))); //20
function callSomeFunction
(someFunction,someArgument){
return someFunction(someArgument);
}
function add10(num){
return num + 10;
}
var re = callSomeFuntion(add10,10); //add10不加
()不会执行
alert(re); //20
if(typeof 5 == 'number'){alert 2;}
楼主仔细看一下这句话,就可以发现错误了。
PS:不要这样写代码,即使这么短的语句,最好也分行来写,如果你分行写,可能就不会出这个粗心的错误了。[/quote]
唉 alert()后面没加()啊 嘿嘿 [/quote]
脑图太庞大,赶脚乱了[/quote]
我也感觉到了,有没有好的建议?alert({}); //等价 alert({}.toString());
var obj = {
a:1,
toString:function(){return "value"}
};
alert(obj);//返回value
[/quote]
谢谢你的解答。我明白了,书上字面意思表达不正确。alert()可以接受任意类型的值.只是它会调用参数的toString()方法。这个toString方法可以重写.例如:
alert({toString:function(){return 666}});
if(typeof 5 == 'number'){alert 2;}
楼主仔细看一下这句话,就可以发现错误了。
PS:不要这样写代码,即使这么短的语句,最好也分行来写,如果你分行写,可能就不会出这个粗心的错误了。[/quote]
唉 alert()后面没加()啊 嘿嘿 [/quote]
脑图太庞大,赶脚乱了alert({}); //等价 alert({}.toString());
var obj = {
a:1,
toString:function(){return "value"}
};
alert(obj);//返回value
[/quote]
alert会调用toString方法,为何console.info不会?
除了alert哪些函数也会自动调用toString方法呢?alert({}); //等价 alert({}.toString());
var obj = {
a:1,
toString:function(){return "value"}
};
alert(obj);//返回value
[/quote]
对象原来可以自定义toString函数啊,呵呵alert({}); //等价 alert({}.toString());
var obj = {
a:1,
toString:function(){return "value"}
};
alert(obj);//返回value
if(typeof 5 == 'number'){alert 2;}
楼主仔细看一下这句话,就可以发现错误了。
PS:不要这样写代码,即使这么短的语句,最好也分行来写,如果你分行写,可能就不会出这个粗心的错误了。[/quote]
唉 alert()后面没加()啊 嘿嘿
if(typeof 5 == 'number'){alert 2;}
楼主仔细看一下这句话,就可以发现错误了。
PS:不要这样写代码,即使这么短的语句,最好也分行来写,如果你分行写,可能就不会出这个粗心的错误了。