看到李老师讲的关于对象和数组这部分视频,对其中的函数声明和调用部分非常感兴趣。
声明
常规
function ObjTest()
{
return ('小实验:常规的函数声明方式');
}
匿名
run:function()
{
return ('匿名函数的声明形式');
}
声明这部分,听到老师讲到了除了常规外的另一种声明方法:匿名函数。匿名函数就是没有名字的函数,要理解匿名函数,还需要搞懂一个闭包的概念。网上搜了一下关于闭包的概念,只是大概了解了下,对于原理和使用还是一脸懵逼的。所以这里就给大家推荐篇比较不错的博客对JAVASCRIPT匿名函数的理解(透彻版),如果有大神路过,也请大神慷慨指点有关闭包和匿名函数一二,不胜感激~~
调用
调用的话看着老师的小栗子,觉得非常有趣然后就自己逐一尝试了下。
First
function ObjDemo()
{
return ('some types of function call');
}
var box={
run:function(){
return ObjDemo();
}
}
alert(box.run());
很明显,这种书写方式可以成功实现功能。
Second
1
function ObjDemo()
{
return ('some types of function call');
}
var box={
run:function(){
run =ObjDemo();
}
}
alert(box.run());
2
function ObjDemo()
{
return ('some types of function call');
}
var box={
run:function(){
run =ObjDemo;
}
}
alert(box.run());
上面这两种情况暴露出来的都是同一种问题:简单的通过赋值运算即想实现函数的调用。1的下发还靠谱点,带这个小括号;2就干脆小括号也扔了。总而言之,在我认为:不能通过赋值运算实现函数的调用。
THird
function ObjDemo()
{
return ('some types of function call');
}
var box={
run:function(){
return ObjDemo;
}
}
alert(box.run());
效果
想了想这种写法,应该也不算是出错了,得看你想实现的功能是调用函数还是打印出来函数。上面这个demo没有书写小括号,所以就把需要调用的函数的函数体整个打印了出来。
总结
以前从来没有系统思考过函数调用的问题,只是知道return,对其他的一概不知。现在通过李老师的视频,觉得对函数调用的理解更加清晰了。
感谢您的宝贵时间,祝生活愉快,谢谢~~
——书生