javascript匿名方法

首先,看一段很有意思的代码:


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>匿名</title>
<script type="text/javascript">
(function() {
aa = 1;
})();
alert(aa);
</script>
</head>
<body>
</body>
</html>

这个结果是什么?

很多时候在看第三方js插件时,会看的(function(){})(); 这种样子的代码。.net程序猿很费解。

这种写法是非常好的方式。

javascript是一种上手简单,往后学就会觉得比较难,再往后又会觉得简单的语言。(看的资料上很多这么说,不幸的是我一直觉得它很难。)写javascript千万不能把它当类似C语言的写法写。javascript可以说都是对象。(function(){})();这么个写法,不知道专业人员怎么说,我的理解是函数表达式和执行函数。因为没有var
所以可以节省变量,不会给window下添加新的对象。

不会给window下添加新的对象,这句话怎么理解呢?

首先应该说下javascript的变量作用域,javascript是没有块作用域,变量一旦声明,就会在整个方法体中。下面代码;alert出的结果是2。而不会报变量未定义的错误。但在A方法外,i
变量就出作用域了。


<script type="text/javascript">
function A()
{
for(var i=0;i<2;i++)
{}
alert(i);
}
A();
</script>
 

下段代码会弹出undefined 和2。这时候A();
也可以通过window.A();来调用。 注意这里 为何是 undefined  而不是报的
a is not defined ?


function A()
{
alert(a);
var a = "2";
alert(a);
}
A();//可以换成 window.A();

变量a,也会添加到window下。可以这么调用  window.a;   看下面代码:

<script type="text/javascript">
var a;
</script>

接下来再说函数表达式。var A=function(){alert(1);};

这种声明方法和function A(){} 大体相同,不同就是有执行先后顺序的区别。就像定义变量一样。看下面代码:这时可以弹出1。

A():
function A()
{
alert(1);
}

换成下面这种则会报A is not a function。 var A
=function(){alert(1);}必须要在 A(); 之前。

A();
var A = function () {
alert(1);//必须在A();执行方法 前面。
};

有了这些知识。理解(function(){alert();})();这种方式的代码就简单了。 就是一个函数表达式 立即执行。

(function()
{
alert(1);
})();

把function(){alert(1);} 换成上面的A.因为 A==function
(){alert(1);}  所以就成上面的样子。

变量A存放方法的引用地址。

这样window下也没有新增对象。 有些地方会说不会污染全局变量。

在写js插件时,只暴露一个对象,供调用。可以这么写,看下面代码:


(function(){
window.cjc={
A:function(){
       alert(1);
     },
Sum:function(a,b){
     alert(a+b);
     }
};
})();

暴露出 cjc  一个变量。使用A方法时,cjc.A(); 使用Sum方法时,cjc.Sum(1,2);

还可以这么写。看面代码:


(function (nc) {
nc.A = function () {
alert(1);
};
nc.Sum = function (a, b) {
alert(a + b);
};
})(cjc = {});
//调用Sum方法
cjc.Sum(1,2);

当暴露的变量有冲突时,可以换,只要把 cjc={} 换成别的就行如下面代码:


(function (nc) {
nc.A = function () {
alert(1);
};
nc.Sum = function (a, b) {
alert(a + b);
};
})(test = {});
//调用Sum方法
test.Sum(1,2);

为何可以使用test={} 这种形式?js的语法,上面的代码可以等效成下面这种。


var test={};
(function (nc) {
nc.A = function () {
alert(1);
};
nc.Sum = function (a, b) {
alert(a + b);
};
})(test);
//调用Sum方法
test.Sum(1,2);

看下面这段代码。

if(a=1)
{
alert(a);
}

结果是 alert出1。

javascript语法特性跟别的C、C#这类语言,区别还是不小的。此外javascript特性还有很多,function就有不少,像原型扩展等。感觉开始接触时实战好点。当能做出简单的东西时,要想提高还是得看基础。

能力不足,有地方理解不到位。

javascript匿名方法,码迷,mamicode.com

时间: 2025-01-04 07:24:05

javascript匿名方法的相关文章

Javascript中的方法和匿名方法

Javascript方法(函数) 声明函数 以function开头,后跟函数名,与C#.java不同,Javascript不需要声明返回值类型.参数类型.没有返回值就是undefined. 举个栗子更清楚:  无参数无返回值的方法: function f1(){ alert('这是一个方法'); } f1();//调用方法 无参数有返回值的方法: function f2(){ return 100; } var result=f2();//声明一个变量,接收f1()中的返回值 alert(res

C#基础—匿名方法(Anonymous Mehod)

1.引入匿名方法 早在C# 2.0中就提出了匿名方法,实现了以一种内联的方式声明委托,在此之前,声明委托唯一的方法是"命名方法",虽然 C# 3.0 里有了lambda ,使得写内联代码更加简洁和方法,但是匿名方法依然有他的用处,匿名方法提供了可以忽略参数列表的能力. 2.匿名方法的使用和注意点 什么匿名方法?简单的理解就是没有定义名字的方法(其实编译器还是帮我们生成了一个方法).代码的实现就是把方法的定义和方法的实现内联到了一起. 先看个演示例子: 1 class Program 2

简单介绍Javascript匿名函数和面向对象编程

忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方式: function functionVal(variable){ return 3*variable; } 2.使用Function构造函数,将函数的参数和函数体内容作为字符串参数[不建议使用]: var objFunction=new Function('variable','return 3

JavaScript 匿名函数

// 仅执行一次的匿名函数 ;(function ()//最常见的版本 圆括号包裹起来 表示输入括号很纠结 懒人绝对不理解为什么要有圆括号 { ; console.log( 1 ,2 ,3 ) }()) ;!function ()//其实也可以这样使用 偷懒成功 { ; console.log( 1 ,2 ,3 ) }() , function ()//只要 function 前面不是 分号 花括号等结束符号 是可以直接用逗号使用的 { ; console.log( 4 ,5 ,6 ) }()

JavaScript匿名类整理学习

以下为总结在开源的JavaScript框架中能看到很多这样语法结构(function(){})()比如我最近看的jQuery,及chediter.刚开始的时候我看到这样的结果有点奇怪,它是怎么执行的,并且这是什么样的语法结构,最近偶尔看闭包的时候,才发现原来这是JavaScript种匿名函数(看到这个有点汗,java的匿名类见过,就从来没想到JavaScript中会有匿名函数,也是学的不够牢固).现在我们了解到以上是JavaScript匿名函数的语法结构,怎么声明函数,匿名函数JavaScrip

JavaScript匿名函数的使用

JavaScript匿名函数的使用:  http://www.cnblogs.com/skykang/archive/2010/12/03/1895274.html 一.什么是匿名函数? 在Javascript定义一个函数一般有如下三种方式: 1. 函数关键字(function)语句:       function fnMethodName(x){alert(x);}    2. 函数字面量(Function Literals):       var fnMethodName = functio

(转)javascript匿名函数的写法、传参和递归

(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-08-07 断桥残雪部落格 投递稿件 我有话说 今天在整理javascript入门培训的PPT时,提到了匿名函数,所以拿来分享下心得. 匿名函数的写法顾名思义,就是没有名字的函数(⊙﹏⊙b汗).匿名函数通常用于javascript作用域的控制,可以有效的避免对全局变量的污染.常见的匿名函数有下面四种写

(转)Javascript匿名函数的写法、传参、递归

(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-08-07 断桥残雪部落格 投递稿件 我有话说 今天在整理javascript入门培训的PPT时,提到了匿名函数,所以拿来分享下心得. 匿名函数的写法顾名思义,就是没有名字的函数(⊙﹏⊙b汗).匿名函数通常用于javascript作用域的控制,可以有效的

JavaScript 字符串方法

字符方法<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>字符方法</title> </head> <body> <script type="text/javascript"> /* charAt方法和charCodeAt方法都接收一个参数,基于0的字