自执行匿名函数剖析整理
2017-07-18 11:59
176 查看
格式:
(function(){
//代码
})();
解释:这是相当优雅的代码(如果你首次看见可能会一头雾水:)),包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。
来个带参数的例子:
(function(arg){
alert(arg+100);
})(20);
这个例子返回120。
重要用途:可以用它创建命名空间,只要把自己所有的代码都写在这个特殊的函数包装内,那么外部就不能访问,除非你允许。
(function(){
function $(id){
return document.getElementById(id);
}
function __addClass(id,className,classValue){
$(id).style.className=classValue;
}
window['mySpace']={};
window['mySpace']['addClass']=__addClass;
})();
上面的例子就可以用这种伪命名空间封装并保护自己的所有函数、对象和变量。而且,由于它们位于同一个函数中,所以可以互相引用。为了对受保护的代码进行全局化,随后的一对括号告诉浏览器立即执行返回的匿名函数,而且在执行期间将__addClass()赋值给了window的一个方法,这样在外部只能执行addClass而__addClass被保护起来了。我可以这样调用它:
mySpace.addClass('oneId','font-width','bold');
实例:test.html
------------------------------
<html>
<head><title>自执行匿名函数</title>
<script type="text/javascript">
(
function(){
function $(id){
return document.getElementById(id);
}
function __addClass(id,className,classValue){
switch(className){
case 'background':{
$(id).style.background=classValue;
break;
}
case 'color':{
$(id).style.color=classValue;
break;
}
case 'fontSize':{
$(id).style.fontSize=classValue+'px';
break;
}
case 'fontWeight':{
$(id).style.fontWeight =classValue;
break;
}
}
}
window['mySpace']={};
window['mySpace']['addClass']=__addClass;
}
)();
</script>
</head>
<body>
<div id="div1">
这是测试区块
</div>
<script type="text/javascript">
mySpace.addClass('div1','background','green');
mySpace.addClass('div1','color','yellow');
mySpace.addClass('div1','fontSize','24');
mySpace.addClass('div1','fontWeight','bold');
</script>
</body>
</html>
-----------------------------------------------------------------------------------------------------------
test2.html、nmFn.js位于同一文件夹
nmFn.js
------------------------
(
function(){
//匿名函数内部私有函数,获取某对象
function $(id){
return document.getElementById(id);
}
//匿名函数内部私有函数,用于改变某对象属性
function __addClass(id,className,classValue){
switch(className){
case 'background':{
$(id).style.background=classValue;
break;
}
case 'color':{
$(id).style.color=classValue;
break;
}
case 'fontSize':{
$(id).style.fontSize=classValue+'px';
break;
}
case 'fontWeight':{
$(id).style.fontWeight =classValue;
break;
}
}
}
//往window对象中添加mySpace属性
window['mySpace']={};
window['mySpace']['addClass']=__addClass;
//1.建立自己的对象
var personObj = {
name:"sam",
age:18,
setAge:function(){var ar=arguments;this.age=ar[0]},
getAge:function(){alert("My age is "+this.age);},
getName:function(id){
if($(i
cf6e
d).value!="" && $(id).value!=" ") this.name=$(id).value;
alert("My name is "+this.name+" "+this.age+" old!!");
}
};
//把自己的对象挂靠到window中
window["person"]=personObj;
}
)();
------------------------
test2.html
------------------------
<html>
<head><title>自执行匿名函数</title>
<script type="text/javascript" src="nmFn.js"></script>
</head>
<body>
<div id="div1">
这是测试区块
</div>
sign your name:<input type="text" id="personName">
<input type="button" value="tell age" onclick="person.getName('personName');" />
<script type="text/javascript">
mySpace.addClass('div1','background','green');
mySpace.addClass('div1','color','yellow');
mySpace.addClass('div1','fontSize','24');
mySpace.addClass('div1','fontWeight','bold');
</script>
</body>
</html>
(function(){
//代码
})();
解释:这是相当优雅的代码(如果你首次看见可能会一头雾水:)),包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。
来个带参数的例子:
(function(arg){
alert(arg+100);
})(20);
这个例子返回120。
重要用途:可以用它创建命名空间,只要把自己所有的代码都写在这个特殊的函数包装内,那么外部就不能访问,除非你允许。
(function(){
function $(id){
return document.getElementById(id);
}
function __addClass(id,className,classValue){
$(id).style.className=classValue;
}
window['mySpace']={};
window['mySpace']['addClass']=__addClass;
})();
上面的例子就可以用这种伪命名空间封装并保护自己的所有函数、对象和变量。而且,由于它们位于同一个函数中,所以可以互相引用。为了对受保护的代码进行全局化,随后的一对括号告诉浏览器立即执行返回的匿名函数,而且在执行期间将__addClass()赋值给了window的一个方法,这样在外部只能执行addClass而__addClass被保护起来了。我可以这样调用它:
mySpace.addClass('oneId','font-width','bold');
实例:test.html
------------------------------
<html>
<head><title>自执行匿名函数</title>
<script type="text/javascript">
(
function(){
function $(id){
return document.getElementById(id);
}
function __addClass(id,className,classValue){
switch(className){
case 'background':{
$(id).style.background=classValue;
break;
}
case 'color':{
$(id).style.color=classValue;
break;
}
case 'fontSize':{
$(id).style.fontSize=classValue+'px';
break;
}
case 'fontWeight':{
$(id).style.fontWeight =classValue;
break;
}
}
}
window['mySpace']={};
window['mySpace']['addClass']=__addClass;
}
)();
</script>
</head>
<body>
<div id="div1">
这是测试区块
</div>
<script type="text/javascript">
mySpace.addClass('div1','background','green');
mySpace.addClass('div1','color','yellow');
mySpace.addClass('div1','fontSize','24');
mySpace.addClass('div1','fontWeight','bold');
</script>
</body>
</html>
-----------------------------------------------------------------------------------------------------------
test2.html、nmFn.js位于同一文件夹
nmFn.js
------------------------
(
function(){
//匿名函数内部私有函数,获取某对象
function $(id){
return document.getElementById(id);
}
//匿名函数内部私有函数,用于改变某对象属性
function __addClass(id,className,classValue){
switch(className){
case 'background':{
$(id).style.background=classValue;
break;
}
case 'color':{
$(id).style.color=classValue;
break;
}
case 'fontSize':{
$(id).style.fontSize=classValue+'px';
break;
}
case 'fontWeight':{
$(id).style.fontWeight =classValue;
break;
}
}
}
//往window对象中添加mySpace属性
window['mySpace']={};
window['mySpace']['addClass']=__addClass;
//1.建立自己的对象
var personObj = {
name:"sam",
age:18,
setAge:function(){var ar=arguments;this.age=ar[0]},
getAge:function(){alert("My age is "+this.age);},
getName:function(id){
if($(i
cf6e
d).value!="" && $(id).value!=" ") this.name=$(id).value;
alert("My name is "+this.name+" "+this.age+" old!!");
}
};
//把自己的对象挂靠到window中
window["person"]=personObj;
}
)();
------------------------
test2.html
------------------------
<html>
<head><title>自执行匿名函数</title>
<script type="text/javascript" src="nmFn.js"></script>
</head>
<body>
<div id="div1">
这是测试区块
</div>
sign your name:<input type="text" id="personName">
<input type="button" value="tell age" onclick="person.getName('personName');" />
<script type="text/javascript">
mySpace.addClass('div1','background','green');
mySpace.addClass('div1','color','yellow');
mySpace.addClass('div1','fontSize','24');
mySpace.addClass('div1','fontWeight','bold');
</script>
</body>
</html>
相关文章推荐
- jquery源码学习笔记:自执行匿名函数剖析
- 自执行匿名函数剖析
- 自执行匿名函数剖析
- 自执行匿名函数剖析
- (面向c#开发人员) 编写javascript的好习惯九 匿名自执行函数
- js闭包的用途(匿名自执行函数,缓存,实现封装,实现面向对象)
- 采用自执行的匿名函数解决for循环使用闭包的问题
- jQuery源码学习之一 (采用匿名函数自执行模式)
- jQuery源码学习之一 (采用匿名函数自执行模式)
- Java基础毕向东day05 对象与对象的区别,匿名内部类,函数的执行流程。
- 匿名函数自执行原理和instanceof运算符执行原理
- 函数编译与执行及虚函数剖析(源码论证)
- 自我执行的匿名函数是如何工作的
- VS下EXE可执行文件启动代码剖析(3)_ioinit 函数
- jquery源码笔记1-匿名自执行函数
- IE中页面关闭导致匿名函数执行报"script释放无法执行"错误问题
- VS下EXE可执行文件启动代码剖析(4)_cinit 函数
- JS中的匿名函数自执行、函数声明与函数表达式
- PHP学习笔记--字符串操作 作者:yezi33 字符串的整理: trim():除去字符串开头和末尾的空格或其他字符。函数执行成功时返回删除了string字符串首部和尾部空格的字符串,发生错误时返回空
- 谈一谈匿名函数立即执行(IIFE)的写法