js当一个变量为函数时 应该注意的一点细节小结


Posted in Javascript onDecember 29, 2011

先看一段简单的代码:

var testFun=function (name,age){ 
var job='Flash Develop'; 
return new testFun.init(name,age,job); 
} 
testFun.init=function(name,age,job){ 
return 'name:'+name+',age:'+age+',job:'+job+''; 
} 
alert(testFun('vincent',30)); //[object Object]

代码很简单,变量testFun为一个匿名函数,匿名函数返回的一个testFun.init对象(也是一个匿名函数)。但对于一些新手有时会误解为:testFun是返回的一个testFun.init对象。他可能会这样想,在匿名函数function(name,age)构建过程中,又用到了testFun. 此时testFun还在构建中,应该还没有存在,testFun.init更没有存在,怎么就可以用testFun.init呢?

其实这样想是存在了一个误区:把testFun与testFun()等同起来了,如果testFun是返回的一个testFun.init对象,代码应该是testFun=function(name,age){… …}()。正确的理解应该是这样的,testFun只是一个函数,当你把一个函数赋于它时,它就已经存在了,哪怕函数返回的是undefined或null,它本身仍然是Function,只有testFun()执行后返回值才是undefined或null。返回值是testFun()执行的结果,结果返回后,就不再与testFun有任何关系。如:

var testFun=function(){ 
return undefined; 
} 
var result=testFun(); 
alert(testFun); // function () {return undefined;} 
alert(result); // undefined result与testFun不再有任何关系

所以,当赋于testFun一个匿名函数后,它就一直存在着,直到赋于它另外一个值。对于testFun.init你可以这样简单的去理解:
testFun.init=function(name,age){}.init=function(name,age.job){… …}
综上所述,回头再看testFun是一个函数,而testFun()则是(function(name,age,job){return 'name:'+name+',age:'+age+',job:'+job+''; })()
为了便于理解,可以把代码精简为:
var testFun=function(){} 
testFun.init=function(){}

只是testFun()没有返回一个testFun.init对象罢了。
Javascript 相关文章推荐
拖动一个HTML元素
Dec 22 Javascript
JS网络游戏-(模拟城市webgame)提供的一些例子下载
Oct 14 Javascript
JS DOM 操作实现代码
Aug 01 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
JQUERY对单选框(radio)操作的小例子
Apr 25 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
Oct 29 Javascript
利用JS提交表单的几种方法和验证(必看篇)
Sep 17 Javascript
使用jquery.qrcode.js生成二维码插件
Oct 17 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
Jan 23 Javascript
vue实现短信验证码登录功能(流程详解)
Dec 10 Javascript
node事件循环和process模块实例分析
Feb 14 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 #Javascript
javaScript 利用闭包模拟对象的私有属性
Dec 29 #Javascript
Jquery中删除元素的实现代码
Dec 29 #Javascript
js的表单操作 简单计算器
Dec 29 #Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 #Javascript
JavaScript中两个感叹号的作用说明
Dec 28 #Javascript
javascript (用setTimeout而非setInterval)
Dec 28 #Javascript
You might like
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
php计算title标题相似比的方法
2015/07/29 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
在js中使用"with"语句中跨frame的变量引用问题
2007/03/08 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
python3实现读取chrome浏览器cookie
2016/06/19 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
个人自我鉴定总结
2014/03/25 职场文书
交通违章检讨书
2014/09/21 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
2014会计年终工作总结
2014/12/20 职场文书
高三复习计划
2015/01/19 职场文书
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript