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 相关文章推荐
热点新闻滚动特效的js代码
Aug 17 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
JQuery中节点遍历方法实例
May 18 Javascript
jQuery 判断图片是否加载完成方法汇总
Aug 10 Javascript
JavaScript在网页中画圆的函数arc使用方法
Nov 13 Javascript
两种js监听滚轮事件的实现方法
May 13 Javascript
JSON字符串和对象相互转换实例分析
Jun 16 Javascript
微信小程序 购物车简单实例
Oct 24 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
使用TS来编写express服务器的方法步骤
Oct 29 Javascript
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
为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获取数组中键值最大数组项的索引值
2015/03/17 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
JavaScript解析URL参数示例代码
2013/08/12 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Python生成数字图片代码分享
2017/10/31 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
介绍一下Mysql的存储引擎
2015/02/12 面试题
教师师德教育的自我评价
2013/10/31 职场文书
应届生财务会计求职信
2013/11/05 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android