- 浏览: 275758 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
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 1067设置cookie每个cookie都是一个名/值对,可以把下面这 ... -
javascript 的delete操作符
2010-06-02 17:36 2352最近重新温习JS,对delete操作符一直处于一知半解的状态, ... -
try catch finally
2010-05-31 08:38 1486try catch finally是javascript ... -
showModalDialog()、showModelessDialog()方法使用详解
2010-05-30 23:24 1524Javascript有许多内建的方法来产生对话框,如:wind ... -
window.event对象详细介绍
2010-05-30 23:11 27281、event代表事件的状态,例如触发event对象的元素、鼠 ... -
cookie跨域访问的问题
2010-05-14 14:41 4994cookie跨域访问的问题(多个项目间) 今天有一同 ... -
escape() encodeURI() encodeURIComponent() 区别
2010-04-26 18:03 1006escape() 方法: 采用ISO ... -
javaScript 中函数对象 call 方法的使用
2010-04-20 20:44 1504javaScript 中的call() 是一个奇妙的方法,但也 ... -
js 数组 pop,push,unshift,splice,shift
2010-04-17 15:45 5952Js:数组的各种方法范例pop,push,unshift,sp ... -
window.showModalDialog 的使用
2010-03-20 11:04 985父窗口 var a = window.showModal ... -
js中escape,encodeURI,encodeURIComponent三个函数的区别
2010-02-06 19:09 870js对文字进行编码涉及3个函数:escape,encodeUR ... -
关于js中window.location.href,location.href,parent.location.href,top.location.href的用
2009-11-25 14:44 18002"window.location.href" ... -
window.location.href和window.location.replace的区别
2009-06-17 16:26 2514总是在资料上看到 window.location.href和w ... -
javascript 正则
2009-04-14 22:14 839javascript中与正则表达式有关的匹配字符串的函数主要有 ... -
javascript 小技巧
2009-04-01 10:27 824<!-- 另存为图片 --> ... -
javascript 小技巧
2009-03-27 20:08 1055//最小化,最大化,关闭 <object id=min ... -
javascript 小技巧
2009-03-27 19:32 766text文本框 内容保存 <HTML> < ... -
javascript 小技巧
2009-03-27 19:30 815事件源对象 event.srcElement.tagName ... -
javascript 小技巧
2009-03-27 19:26 1038//setTimeout增加参数 <script> ... -
页面打印Js 代码
2009-03-27 18:49 2902<script language=javascript& ...
相关推荐
这两个数组方法接收一个可迭代对象或类数组对象并转换成数组。例如,`Array.from('hello')`会返回字符数组,而`Array.of(1, 2, 3)`创建一个包含三个元素的数组。 总的来说,JavaScript中的小括号“()”在不同的上...
这个正则表达式的模式由两部分组成:`\(` 表示匹配左小括号,`\)` 表示匹配右小括号。`(.+?)` 是一个非贪婪捕获组,它会捕获从左括号到右括号之间尽可能少的任何字符(除了换行符)。`g` 是全局标志,表示匹配所有...
`replace()` 方法接受两个参数:第一个是正则表达式,第二个是要替换为的新内容。在这个例子中,我们没有提供新内容,所以匹配到的括号及其内容将被替换为空字符串,即删除它们。 `g` 是一个修饰符,表示全局匹配,...
在JavaScript编程语言中,小括号“()`”的多义性是其语法灵活性的一个关键特性。下面我们将详细探讨这五种不同的语义: 1. **函数声明时的参数列表**: 在JavaScript中,当你声明一个函数时,小括号用于包含函数的...
**功能说明**:捕获分组是最常见的小括号用法之一。它将一个或多个字符作为一个整体对待,并能够捕获这些字符以便后续使用。这种分组方式可以与量词(如`*`、`+`、`?`)、选择符(如`|`)等其他正则表达式元素结合...
本篇将详细介绍微信小程序中的Base64加解密以及相关的使用方法。 Base64是一种基于64个可打印字符来表示二进制数据的编码方式。这64个字符包括大小写字母、数字以及"+"和"/",最后还会用到一个等于号"="作为填充。...
总的来说,通过使用逗号运算符和花括号,我们可以有效地将多个JavaScript语句组合在一起,以提高代码的可读性和效率。然而,要注意,虽然这种技巧可以节省空间,但过度使用可能会降低代码的清晰度,因此在实际编程中...
但如果是两个或更多键值对,就需要使用小括号了: ```javascript var str = '{"name":"hanzichi","age":10}'; var obj = eval(str); // SyntaxError: Unexpected token ``` #### 四、注意事项 尽管`eval()`可以...
首先,replace()方法接收两个参数,第一个参数是一个正则表达式(可以是RegExp对象或字符串形式),用于指定要替换的子串;第二个参数是一个字符串或函数,用于定义替换的内容。使用正则表达式可以完成许多复杂的...
在使用Visual Studio Code (VSCode) 这款强大的代码编辑器进行编程时,有时会遇到一些小困扰,比如在大括号中按下回车键不自动换行并缩进的问题。这个问题对于程序员来说,确实会影响编码的流畅度和效率。本文将详细...
### 详解JS正则`replace`的用法 本文旨在深入解析JavaScript中正则表达式与`replace`方法的结合使用技巧。通过一系列基础知识的复习和实战案例的演示,帮助读者掌握这一强大的文本处理工具。 #### 一、正则表达式...
concat 方法 (String) 返回一个包含给定的两个字符串连接的String 对象。 条件(三元)运算符 (?:) 根据条件执行两个表达式之一。 constructor 属性 指定创建对象的函数。 continue 语句 停止循环的当前迭代...
在JavaScript中,可以使用`Date`对象来计算两个日期之间的差异,通过比较这个差异是否小于或等于100年,来实现这一功能。 #### 1.3 日期格式转换:yyyy-MM-dd → yyyymmdd 在JavaScript中,可以通过字符串操作函数...
JavaScript Unpacker 和 Beautifier 是两个在Web开发领域中用于处理JavaScript代码的工具。它们的主要目的是为了帮助开发者理解和优化复杂的JavaScript代码。 JavaScript Packer 是一个工具,它将源代码压缩成更小...
这两个方法是JSON处理的核心功能。 2. **json_parse_state.js**:此文件可能包含了一个JSON解析器的状态管理部分。在解析JSON字符串时,由于JSON语法有其特定规则,如键必须是字符串,值可以是多种类型等,因此解析...
- **脚本编写语言**:JavaScript是一种脚本语言,它采用小程序段的方式实现编程,其基本结构形式与C、C++、VB、Delphi等语言类似。然而,JavaScript与其他这些语言的不同之处在于它是解释型语言,在程序运行过程中被...
示例代码中定义了两个名为 `isSBCcase` 的函数,分别用于检测全角符号和中文字符。 #### 2.1 函数声明 函数使用 `function` 关键字进行声明,后面跟函数名和参数列表。 - `function isSBCcase(str) {...}`:定义了...
例如,两个数相加的表达式是: ```javascript let result = num1 + num2; ``` 为了实现连续运算,我们可能需要存储前一次的运算结果,并提供括号支持。这涉及到操作栈的概念,可以使用数组模拟栈来处理优先级问题...
JavaScript 数据类型知识点总结及基础类型的使用方法 JavaScript 中的数据类型是指在编程语言中对常用的各种数据类型进行明确的划分,以便让计算机正确的识别和处理不同的数据类型。在 JavaScript 中,常用的数据...