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 相关文章推荐
javascript操作cookie_获取与修改代码
May 21 Javascript
传智播客学习之JavaScript基础篇
Nov 13 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
May 24 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
Feb 28 Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
Oct 16 Javascript
JavaScript 函数的定义-调用、注意事项
Apr 16 Javascript
JavaScript中一些特殊的字符运算
Aug 17 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 jQuery
layui select 禁止点击的实现方法
Sep 05 Javascript
Javascript组合继承方法代码实例解析
Apr 02 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动态创建Flash动画
2006/10/09 PHP
PHPLog php 程序调试追踪工具
2009/09/09 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
joomla组件开发入门教程
2016/05/04 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
jQuery之简单的表单验证实例
2016/07/07 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
Vue实现图书管理小案例
2020/12/03 Vue.js
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
python numpy元素的区间查找方法
2018/11/14 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
基于Tensorflow高阶读写教程
2020/02/10 Python
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
远程调用的原理
2014/07/05 面试题
恐龙的灭绝教学反思
2014/02/12 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
java项目构建Gradle的使用教程
2022/03/24 Java/Android