- 浏览: 269764 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
yh008:
不错的工具类。 版面需要调整下,有些内容看不到了,只能复制粘贴 ...
Spring 优秀工具类盘点,第 1 部分: 文件资源操作二 -
手心的水滴:
function Foo() { (function( ...
js 两个小括号 ()() 的用法 -
showthesunli:
博主说了这么多,我来说说我的想法,不晓得对不对总结一下,如下代 ...
js 两个小括号 ()() 的用法 -
aqbzwxd:
就是这种盲目无原理依据的研究测试弄晕了我, 有必要这么做吗? ...
js 两个小括号 ()() 的用法 -
wst0350:
多谢
oracle 触发器
JavaScript 中,考查如下代码:
(function() { alert("cftea"); })();
其实这段代码的意思就是执行这个匿名函数,弹出提示框,内容为“cftea”。
可以把上述代码理解为:
function foo() { alert(1); } foo();
其实相同的功能还有另外两种写法,我们一并列出来如下:
function foo() { alert("cftea"); } foo(); (function() { alert("cftea"); })(); (function() { alert("cftea"); }()); void function() { alert("cftea"); }()
用途
说了这么多,这东西到底有什么用呢?它可以立即执行一段代码,并把结果赋给变量;打破我们常规的先写函数,再调用的流程,简化书写。
ajax.xmlhttp = (...)();
function Foo() { var a = 123; this.a = 456; (function() { alert(a); // 123 alert(this.a); // undefined })(); } var f = new Foo();
以上代码,先显示 123,再显示 undefined,说明 alert(this.a); 这句中 this 是指本 function 的,而不是其外部 function 的。如果要使用外部的成员,可使用参数的形式传入:
function Foo() {
var a = 123;
this.a = 456;
(function(a) {
alert(a); // 456
})(this.a);
}
var f = new Foo();
很好理解,再看看下面的:
function Foo() {
var a = 123;
this.a = 456;
(function() {
alert(a); // 123
alert(this.a); // undefined
this.b = 789;
})();
(function() {
alert(this.b); // 789
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
})();
同样是先显示 123,然后显示 undefined,然后显示 789,最后又是一个 789。这说明用两个小括号括起来的都是位于一个执行上下文中的,不论这些代码放在哪里。
再看看:
function Foo() {
(function() {
this.b = 789;
})();
(function() {
alert(this.b); // 789
var b = 0;
alert(b); // 0
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
alert(b); // 789
})();
令人意外的是,最后一个 alert(b),结果仍然是 789。
更深入一步:
function Foo() {
(function() {
this.b = 789;
})();
(function() {
alert(this.b); // 789
alert(b); // undefined
var b = 0;
alert(b); // 0
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
alert(b); // 789
})();
从上,我们可以看出,取值时、没有加 this 时:如果当前 () 中不存在同名的局部变量,则等同于加 this 处理;如果当前 () 中存在同名的局部变量,则按常规处理。
评论
(function() {
this.b = 789; // window.b = 789
})();
(function() {
alert(this.b); // 789, window.b
var b = 0;
alert(b); // 0, 这样的测试也写出来了!
})();
}
我想问一下
黑体 部分var b = 0; 这个是window的还是局部的?
什么道理
非的this.b 才能是window的么?
总结一下,如下代码:
function Foo() {
(function() {
this.b = 789;
})();
(function() {
alert(this.b); // 789
alert(b); // undefined
var b = 0;
alert(b); // 0
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
alert(b); // 789
})();
上面代码执行new Foo()的时候,Foo()函数里面的两个小括号是DOMWindow对象调用的,所以其中的this向DOMWindow,所以 两个小括号之中的this.b = 789 其实相当于window.b = 789
不晓得我这样说对不对
var的规则是: 使用var声明变量就是内部变量, 否则就是先调用全局变量, 不管多少层函数.
this的规则是: method函数里的this永远指向自身, 普通函数的this永远指向DOMWindow.
// GodDamnTest1
function Foo() {
var a = 123; // 局部变量, 所有子函数的全局变量
this.a = 456; // 对象属性
(function() {
alert(a); // 123, 全局
alert(this.a); // undefined, 普通函数, this指向DOMWindow
})();
}
var f = new Foo();
// GodDamnTest2
function Foo() {
var a = 123;
this.a = 456;
(function(a) { // 局部声明
alert(a); // 456, 被函数局部声明的a覆盖了全局
})(this.a);
}
var f = new Foo();
// GodDamnTest3
function Foo() {
var a = 123;
this.a = 456;
(function() {
alert(a); // 123, 全局
alert(this.a); // undefined, DOMWindow
this.b = 789; // window.b = 789
})();
(function() {
alert(this.b); // 789, window.b
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789, window.b
})();
// GodDamnTest4
function Foo() {
(function() {
this.b = 789; // window.b = 789
})();
(function() {
alert(this.b); // 789, window.b
var b = 0;
alert(b); // 0, 这样的测试也写出来了!
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789, window.b
alert(b); // 789, window.b
})();
令人意外的是,最后一个 alert(b),结果仍然是 789。 // no damn surprise at all!
// GodDamnTest5
function Foo() {
(function() {
this.b = 789; // window.b = 789
})();
(function() {
alert(this.b); // 789, window.b
alert(b); // undefined, 全局
var b = 0;
alert(b); // 0, 还有这种测试!
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789, window.b
alert(b); // 789, window.b
})();
发表评论
-
cookie操作
2010-06-03 09:12 1022设置cookie每个cookie都是一个名/值对,可以把下面这 ... -
javascript 的delete操作符
2010-06-02 17:36 2279最近重新温习JS,对delete操作符一直处于一知半解的状态, ... -
try catch finally
2010-05-31 08:38 1423try catch finally是javascript ... -
showModalDialog()、showModelessDialog()方法使用详解
2010-05-30 23:24 1478Javascript有许多内建的方法来产生对话框,如:wind ... -
window.event对象详细介绍
2010-05-30 23:11 26171、event代表事件的状态,例如触发event对象的元素、鼠 ... -
cookie跨域访问的问题
2010-05-14 14:41 4949cookie跨域访问的问题(多个项目间) 今天有一同 ... -
escape() encodeURI() encodeURIComponent() 区别
2010-04-26 18:03 972escape() 方法: 采用ISO ... -
javaScript 中函数对象 call 方法的使用
2010-04-20 20:44 1468javaScript 中的call() 是一个奇妙的方法,但也 ... -
js 数组 pop,push,unshift,splice,shift
2010-04-17 15:45 5899Js:数组的各种方法范例pop,push,unshift,sp ... -
window.showModalDialog 的使用
2010-03-20 11:04 928父窗口 var a = window.showModal ... -
js中escape,encodeURI,encodeURIComponent三个函数的区别
2010-02-06 19:09 830js对文字进行编码涉及3个函数:escape,encodeUR ... -
关于js中window.location.href,location.href,parent.location.href,top.location.href的用
2009-11-25 14:44 17945"window.location.href" ... -
window.location.href和window.location.replace的区别
2009-06-17 16:26 2481总是在资料上看到 window.location.href和w ... -
javascript 正则
2009-04-14 22:14 804javascript中与正则表达式有关的匹配字符串的函数主要有 ... -
javascript 小技巧
2009-04-01 10:27 789<!-- 另存为图片 --> ... -
javascript 小技巧
2009-03-27 20:08 957//最小化,最大化,关闭 <object id=min ... -
javascript 小技巧
2009-03-27 19:32 731text文本框 内容保存 <HTML> < ... -
javascript 小技巧
2009-03-27 19:30 719事件源对象 event.srcElement.tagName ... -
javascript 小技巧
2009-03-27 19:26 994//setTimeout增加参数 <script> ... -
页面打印Js 代码
2009-03-27 18:49 2867<script language=javascript& ...
相关推荐
concat 方法 (String) 返回一个包含给定的两个字符串连接的String 对象。 条件(三元)运算符 (?:) 根据条件执行两个表达式之一。 constructor 属性 指定创建对象的函数。 continue 语句 停止循环的当前迭代...
Javascript 中将多个语句写成一个语句的两种方法小结 一、使用逗号运算符将多个语句写成一个语句 1.一次声明多个变量 var i=1,j=1,k=1 2.多个语句用逗号间隔 i=1,j=i+2,k=j+2 二、使用花括号将多个语句写...
concat 方法 (String) 返回一个包含给定的两个字符串连接的String 对象。 条件(三元)运算符 (?:) 根据条件执行两个表达式之一。 constructor 属性 指定创建对象的函数。 continue 语句 停止循环的当前迭代...
1.1连接两个或多个字符串 1.2连接字符串和另一种数据类型 1.3条件比较字符串 1.4在字符串中查找子字符串 1.5从一个字符串提取子字符串 1.6检查一个存在的、非空的字符串 1.7将一个关键字字符串分解为...
想写一个简易的计算器,本来以为要不了多久就能写出来的,谁知道愣是花费了我近两个小时的时间来写,但结果还是不能令我满意。想找一个更好的方法来写,不想写的那么麻烦,用什么方法呢?想了一个遍,后来猛然看到...
通过使用 JavaScript,我们有...setInterval()的使用方法: setInterval(code,millisec); code:可以是方法名,如果是方法不要加小括号。同时也可以是字符串用双引号将方法括起来。setInterval(“setCode()”,10
concat 方法 (String) 返回一个包含给定的两个字符串连接的String 对象。 条件(三元)运算符 (?:) 根据条件执行两个表达式之一。 constructor 属性 指定创建对象的函数。 continue 语句 停止循环的当前迭代...
使用方法:方法名()-->方法调用-->立即执行 2.js文件:网页外专门保存js脚本的文件--推荐 强调:HTML、CSS、JS都要使用UTF-8编码保存(window系统) 使用js文件引入网页:[removed][removed] 强调:一旦定义...
JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...
1、JS中方法和变量都是区分大小写的 2、单引号、双引号在JS中没有特殊的区别,都可以用来创建字符串。但作为一般性规则,大多数开发人员喜欢用单引号而不是双引号,但是XHTML规范要求所有属性值都必须使用双引号括...
现在把一定数量的字符放到小括号里,比如: "a(bc)*": 匹配 a 后面跟0个或者一个"bc"; "a(bc){1,5}": 一个到5个 "bc." 还有一个字符 '│', 相当于OR 操作: "hi│hello": 匹配含有"hi" 或者 "hello" 的 ...
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,...
可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间 l 可以使用assign指令在导入的名字空间中创建或替代变量,下面是一个例子: ${my.mail} ${my.mail} l 输出结果: jsmith@...
这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...
这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...
boolean (8bit,不定的)只有true和false两个值 char 16bit, 0~2^16-1 (2^16=6万6) byte 8bit, -2^7~2^7-1 (2^7=128; 注意:两个 byte 数相加,变 int 型) short 16bit, -2^15~2^15-1 (2^15=32768) int 32bit, ...
然后再下载一个.NET FRAMEWORK SDK,安装以后会在控制面板里面的管理工具里面多两个东西,这个不用理睬他,我们要使用的还是原来的INTERNET服务管理器。打开它按照ASP教程里面的调试方法建立一个目录,建立一个...
这里的IDE设备包括了IDE硬盘和IDE光驱,第一、第二组设备是指主板上的第一、第二根IDE数据线,一般来说靠近芯片的是第一组IDE设备,而主设备、从设备是指在一条IDE数据线上接的两个设备,大家知道每根数据线上可以接...
使用花括号和双引号进行分组 过程 一个阶乘的例子 更多有关变量的知识 更多有关数学表达式的内容 注释 有关替换与分组的总结 要点 参考 第2章 开始使用 source命令 unix上的tcl脚本程序 .windows 95的...
4.7 无标题窗体拖动的两种方法 183 4.8 让程序只启动一次——单实例运行 184 4.9 实现系统托盘和热键呼出 185 4.10 进程与多线程的区别 190 4.11 创建多线程应用程序 191 4.12 WinForm开发常见问题 194 4.12.1 如何...