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 = ;
})();
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=;i<;i++)
{}
alert(i);
}
A();
</script>
下段代码会弹出undefined 和2。这时候A(); 也可以通过window.A();来调用。 注意这里 为何是 undefined 而不是报的 a is not defined ?
function A()
{
alert(a);
var a = "";
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();
}
换成下面这种则会报A is not a function。 var A =function(){alert(1);}必须要在 A(); 之前。
A();
var A = function () {
alert();//必须在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();
};
nc.Sum = function (a, b) {
alert(a + b);
};
})(cjc = {});
//调用Sum方法
cjc.Sum(,);
当暴露的变量有冲突时,可以换,只要把 cjc={} 换成别的就行如下面代码:
(function (nc) {
nc.A = function () {
alert();
};
nc.Sum = function (a, b) {
alert(a + b);
};
})(test = {});
//调用Sum方法
test.Sum(,);
为何可以使用test={} 这种形式?js的语法,上面的代码可以等效成下面这种。
var test={};
(function (nc) {
nc.A = function () {
alert();
};
nc.Sum = function (a, b) {
alert(a + b);
};
})(test);
//调用Sum方法
test.Sum(,);
看下面这段代码。
if(a=)
{
alert(a);
}
结果是 alert出1。
javascript语法特性跟别的C、C#这类语言,区别还是不小的。此外javascript特性还有很多,function就有不少,像原型扩展等。感觉开始接触时实战好点。当能做出简单的东西时,要想提高还是得看基础。
能力不足,有地方理解不到位。
javascript匿名方法的更多相关文章
- (转)Javascript匿名函数的写法、传参、递归
(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http: ...
- (转)javascript匿名函数的写法、传参和递归
(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-0 ...
- 简单介绍Javascript匿名函数和面向对象编程
忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...
- 第一百一十节,JavaScript匿名函数和闭包
JavaScript匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂 ...
- JavaScript匿名自执行函数~function(){}
原博客:https://blog.csdn.net/yaojxing/article/details/72784774 1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: ...
- JavaScript匿名类整理学习笔记
以下为总结在开源的JavaScript框架中能看到很多这样语法结构(function(){})()比如我最近看的jQuery,及chediter.刚开始的时候我看到这样的结果有点奇怪,它是怎么执行的, ...
- JavaScript匿名函数的使用
JavaScript匿名函数的使用: http://www.cnblogs.com/skykang/archive/2010/12/03/1895274.html 一.什么是匿名函数? 在Javas ...
- javascript 匿名函数的理解(转)
原网址 http://www.jb51.net/article/21948.htm javascript 匿名函数的理解(透彻版) 代码如下: (function(){ //这里忽略jQuery所有实 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
随机推荐
- 洛谷—— P1536 村村通
P1536 村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府“村村通工程”的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连, ...
- Spring MVC表单实例
以下内容引用自http://wiki.jikexueyuan.com/project/spring/mvc-framework/spring-mvc-form-handling-example.htm ...
- CentOS 5 全功能服务器搭建
转自: http://www.php-oa.com/2007/12/27/centos-www.html 转:主要做为历史记录,以后用.另外很少见这么好的编译的文章,其实我不推荐用编译安装.但这个文章 ...
- Visual Studio VS如何切换代码自动换行
工具-选项-文本编辑器-自动换行
- VB6 如何自定义代码字体和支持鼠标滚轮
1 点击工具-选项-编辑器格式,把代码改成需要的字体和大小.(一般微软雅黑,16号字体比较好) 2 从以下网站下载VB6增强工具,可以支持鼠标滚轮代替右侧滚动条查看代码,按F3还可以切换代码窗口和 ...
- Android调试工具_ Stetho
Stetho是Facebook开源的一个Android平台调试工具. Stetho能实如今不root手机的情况下,通过Chrome查看App的布局,Sqlite,SharedPreference.Ne ...
- webservice0基础
在学习webservice的时候,常常将ns和url花了好久时间才理解过来,这里备份下. 首先定义接口: @WebService public interface IService { @WebRes ...
- Robotframework集成jenkins执行用例
Robotframework+jenkins配置 假设我们完成了一个模块的用例设计,可是想晚上9点或凌晨运行,这时候该怎么实现呢?jenkins可以很好解决我们的疑难. Jenkins安装 这里简单说 ...
- 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
大型网站技术架构(四)--核心架构要素 作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...
- Ctags基本配置
一般linux系统都会自带ctags,也可输入"ctags"看有木有该命令.有的话速度配置吧,没有话yum install ctags安装吧. 打开vim 配置文件,要是没该文件就 ...