- 浏览: 1206661 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
第五章 方法
1、The basic syntax is:
function functionName(arg0, arg1,...,argN) {
statements
}
如果方法有返回值,不需要声明返回的类型就象JAVA的VOID一样如:
function sum(iNum1, iNum2) {
return iNum1 + iNum2;
}
The value of the sum function is returned and assigned to a variable like this:
var iResult = sum(1,1);
alert(iResult); //outputs “2”
Another important concept is that, just as in Java, the function stops executing code after a return statement is executed.(return后面的语句将不再执行)
If a function doesn’t return a value, it can use the return operator without any parameters to exit a function at any time. Example:
function sayHi(sMessage) {
if (sMessage == “bye”){
return;
}
alert(sMessage);
}
In this code, the alert will never be displayed if the message is equal to the string “bye”.
When a function doesn’t explicitly return a value or uses the return statement without a value, the function actually returns undefined as its value.
当方法没有明确声明返回某个确定的值而使用了return;实际上方法返回的值为undefined
2、No overloading(js方法没有重载)
You can define two functions with the same name in the same scope without an error; however, the last function becomes the one that is used.
在JS中你可以定义任何多个同名的方法,但是真正起作用的是最后一个定义的方法,也就是说后面的方法相当于重写了前面的方法,前面的方面就不起作用了。
测试例子如下:
<script language="JavaScript">
<!--
function testArgu(arg1){
alert('arg1')
}
function testArgu(arg1,arg2){
alert('arg2')
}
function testArgu(arg1,arg2,arg3){
alert('arg3')
}
testArgu(23);
testArgu(23,23);
testArgu(23,23,23,23);
//-->
</script>
以上定义三个同名的方法,但参数个数不同,你会发现测试结果输出全是arg3.
你会发现testArgu(23,23,23,23);有四个参数,按理说没有方法与之匹配,但它确实输出了arg3,这正说明了JS中方法不能重载。调换三个方法的顺序你会发现谁最后定义,那么该方法将会被调用。其它的当作不存在。那么为什么传进去四个参数却可调用小于四个参数的方法呢?
The arguments object
function sayhi(){
if(arguments[0]=="good"){
alert('sfsf')
}
}
sayhi("good")
arguments对象通过index遍历传入的参数,0第一个参数,1第二个。。。。
可通过arguments对象的length属性检测传入的参数数目
上面提到:为什么传进去四个参数却可调用小于四个参数的方法呢?
解释:ECMAScript functions don’t validate the number of arguments passed against the number of arguments defined by the function; any developer-defined function accepts any number of arguments (up to 255, according to Netscape’s documentation) without causing an error. Any missing arguments are passed in as undefined; any excess arguments are ignored.
JS不会验证传入参数的个数是否与方法定义的参数个数是否相等。也就是说我可以传入至多255个参数到方法中,那怕该方法没有定义所谓的形参。
当然,既然可以通过arguments.length判断传入参数的数目,那么可通过这一属性来模拟出JAVA中的方法重载特性如:
function doAdd() {
if(arguments.length == 1) {
alert(arguments[0] + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
doAdd(10); //outputs “20”
doAdd(30, 20); //outputs “50”
3、The Function class(方法类)
创建一个方法(函数)可以使用:
function functionName(arg0, arg1,...,argN) {
statements
}
你会发现这里使用的是function,注意首字母是小写的,JS中大小写是敏感的。那么通过Function类怎么来创建函数呢?
var function_name = new Function(argument1, argument2,..,argumentN, function_body);
这里要注意的是new Function后面的格式,所有参数必需都为字符串格式,最后为函数体部分
看下面的方法:
function doAdd(iNum) {
alert(iNum + 100);
}
function doAdd(iNum) {
alert(iNum + 10);
}
doAdd(10); //outputs “20”
上面解释过这里定义的方法,后面的方法重写了前面的方法那么将上面的方法換成另一种形式,也就是采用类定义的形式如下:
var doAdd = new Function("iNum","alert(iNum+100)");
var doAdd = new Function("iNum","alert(iNum+10)");
doAdd(10)
看看是不是很容易理解为什么方法名相同的时候最的是后一个方法了。。
不过这里看清楚了,方法名doAdd实际上是一个指向Function对象的引用。所以可以这样:
var doAdd = new Function("iNum","alert(iNum+100)");
var doAdd = new Function("iNum","alert(iNum+10)");
doAdd(10) //outputs “20”
var doAddagain = doAdd;
doAddagain(30) //outputs “40”
既然方法名是一个引用变量,那么就可以完全作为变量来使用,可以将这个变量作为另一个方法的参数。
var doAdd = new Function("iNum","alert(iNum+100)");
function callFun(fnFun,arg){
fnFun(arg)
}
callFun(doAdd,23) //outputs 123
同样可以使用length属性和toString方法
function doAdd(iNum){
alert(iNum + 100);
}
alert(doAdd.length) //outputs 1 代表参数个数
alert(doAdd.toString()) //方法体内容
alert(doAdd.valueOf()) //方法体内容
4.Closures方法的闭合区域(闭包)
我们知道JAVA等语言是以(if,while,for)等块作为变量范围控制的,在块以肉定义的变量在块以外是不能使用的。在块以块定义的变量是全局变量。那么在JS中是以方法来划分变量作用域范围的,也就是说在本方法以内定义的变量是局部变量,在方法以外定义的变量是全局变量,那么当一个方法调用另一个方法的时候,在被调用方法里就可以直接使用外层方法的变量了,而不用象java里面一样,如果被调用方法要使用外层方法的变量必须将其作为参数传入。
var tempVal = 34;
function alertNum()
{
alert(tempVal)
tempVal = 12;
}
tempVal = 23;
alertNum();
alert(tempVal)
//outputs 23
//outputs 12
JS中方法中可以访问外面环境的变量并改变它,它能侦测变量的变化并把调用前变量的最终值传入方法。
var tempVal = 34;
function alertNum()
{
var tempVal =66
alert(tempVal)
tempVal = 12;
alert(tempVal)
}
tempVal = 23;
alertNum();
alert(tempVal)
//outputs 66
//outputs 12
//outputs 23
这个例子中,首先定义了全局变值为34,再更改为23,而调用方法alerNum(),方法内部自己又定义了一个同名的变量,但是由于方法划分作用域,所以方法内部定义的变量为局部变量,下面将该局部变量改为12,最后调用结束,输出66,12而在方法外面为全局变量范围,所以输出23.
var tempVal = 34;
function alertNum()
{
tempVal =66
alert(tempVal)
tempVal = 12;
alert(tempVal)
}
tempVal = 23;
alertNum();
alert(tempVal)
//outputs 66
//outputs 12
//outputs 12
输出结果与上例不同,两例子的区别是在方法中变量tempVal的定义中使用了var和不使用var,我们知道JS中如果不使用var定义变量,那么会作为全局变量,也就是说这里其实跟下面是一样的效果:
var tempVal = 34;
function alertNum()
{
//tempVal =66
alert(tempVal)
tempVal = 12;
alert(tempVal)
}
tempVal = 23;
var tempVal =66; //重新定义了一个变量,也就是前面的tempVal已经不起作用。
alertNum();
alert(tempVal)
所以我们在方法里面声明变量的时候一定要注意细节。。。
再看下面例子,在方法中调用另一方法时发生的:
var tempVal = 34;
function alertNum(tempNum)
{
var tempNum2 = 23;
function doAdd(){
return tempNum + tempNum2;
}
return doAdd();
}
var result = alertNum(tempVal);
alert(result);
//outputs 57
结果表明,doAdd方法中使用了外围方法alertNum中的变量,在JS中这是一种特性,但在JAVA中是不行的。
对于浏览器来说,全局变量其实是window对象的一个属性:如下
var tempVal = 34;
alert(window.tempVal == 34)
//outputs true
发表评论
-
进制转换及JS进制转换
2013-07-09 15:55 1104八进制:0,1,2,3,4,5,6,7 十六进制:0,1 ... -
javascript标签的id属性
2012-12-25 23:18 1100转:http://countme.iteye.com/blog ... -
判断JS键盘事件
2010-01-21 11:12 1765<STYLE TYPE="text/css&q ... -
JAVASCRIPT基础学习篇(10)附2-URL编码转换,escape() encodeURI() encodeURIComponent()
2008-12-16 13:58 992escape()方法: 采用ISOLatin字符集对指定的 ... -
JAVASCRIPT基础学习篇(10)附1-escape,encodeURI,encodeURIComponent函数比较
2008-12-16 13:59 911http://edu.136z.com/Web/38376.h ... -
JS基础学习篇----JS控制checkbox全选、取消全选、删除功能
2008-12-19 10:22 2041前面讨论了JS控制checkbox,及对document.al ... -
JS基础学习篇----Javascript keycode大全
2008-12-23 14:11 1316keycode 8 = BackSpace BackSpace ... -
JAVASCTIPT调试工具集
2009-02-18 23:24 10391.Firefox + Venkman : http://w ... -
Javascript 学习提高JAVASCRIPT的两本好书
2009-02-19 09:42 1889另有推荐书目:javascript ... -
Javascript JavaScript判断浏览器类型及版本
2009-02-19 09:53 1577本文引自:http://www.cnblogs.com/lea ... -
JAVASCRIPT基础学习篇(1)--JAVAScript起源之:ECMAScript
2009-02-20 09:16 1645[编辑] 历史 1995年12月升阳公司与网景通讯公 ... -
JAVASCRIPT基础学习篇(2)--浏览器发展史
2009-02-20 09:45 865网景(Netscape)是一个 ... -
JAVASCRIPT基础学习篇(3)--ECMAScript Basic:constructor属性
2009-02-20 17:13 847The constructor property is a r ... -
JAVASCRIPT基础学习篇(4)--ECMAScript Basic:prototype属性及通过该属性建立面向对象的JavaScript
2009-02-20 17:45 923JAVASctipt 继承机制的实 ... -
Python
2009-02-21 02:24 2378[编辑] 发展历史 Python的创始人为Guido ... -
JAVASCRIPT基础学习篇(5)--ECMAScript Basic1(EcmaScript 基本类型)
2009-02-23 11:05 945第一章 基本类型 一、The basic concept ... -
JAVASCRIPT基础学习篇(6)--ECMAScript Basic2(EcmaScript 引用类型)
2009-02-23 15:08 848第二章 Reference Types引用类型: 可以使用 ... -
JAVASCRIPT基础学习篇(7)--ECMAScript Basic3(EcmaScript 运算符)
2009-02-24 10:03 1046第三章 运算符 1、The instanceof oper ... -
JAVASCRIPT基础学习篇(8)--ECMAScript Basic4(EcmaScript 表达式)
2009-02-27 14:47 811第四章 表达式 1、The if statement ... -
JAVASCRIPT基础学习篇(10)--ECMAScript Basic6(Object Basics)
2009-03-03 09:29 856第六章 对象 The object definitio ...
相关推荐
unicode匹配属性的电子书 unicode-match-property-ecmascript将给定的Unicode属性或与其规范的属性名称,而无需用于的算法应用。 认为它是松散匹配的严格替代方案。安装要以编程方式使用unicode-match-property-...
ECMAScript Language Specification
proposal-object-rest-spread, ECMAScript的rest/扩展属性 对象的对象 rest/扩展属性ECMAScript 6为 array literals分配了 rest元素和扩展元素( 用于 array 文本。这个建议引入了类似的rest属性对象literals分配和...
Ecma-262(ECMAScript5.1中文版+英文版),中文版为html格式,英文版为chm格式
本书适合那些希望学习Web编程语言的初、中级程序员和希望精通JavaScript的JavaScript程序员阅读。
javascript-978-1-7858-8268-5 学习 ECMAScript 6:转向新的 JavaScript [视频]
ECMAScript规范摘要操作。 每个操作都可以按版本/年份和名称进行使用-例如, es-abstract/2020/Call提供ES2020中的Call操作, es-abstract/5/Type提供ES5中的Type操作。 es5 / es5 / es2015 / es2016 / es2017 / ...
ecmascript-978-1-7886-2817-4 ECMAScript 手册
es5-微垫片ECMAScript 5 函数的几个垫片: Array.isArray Array.prototype.indexOf Function.prototype.bind Object.create Object.keys安装安装: npm install -g component然后: component install gamtiq/es5-...
RATJS是一个用C语言实现的小型javascript/ecmascript解释器。你可以用它来运行自己的javascript程序,也可以将它作为脚本引擎嵌入自己开发的程序中。
用ECMAScript 2017编写的真正基本JavaScript库,用于解析GIF(/gɪf/ not / ˈdʒɪf /)文件。 用法 fetch ( "//url.to/my.gif" ) /* request for a GIF file, can also be a filesystem * read if you use Node...
ecmascript-proposals-json 获取日期的ECMAScript提案列表将提案列表另存为json文件到显示提案之间的差异另请参阅。线上请参阅ECMAScript提案差异工具: :warning_selector: 每天更新。 如果您发现一天没有数据,请...
This book introduces the fresh and core concepts of JavaScript in the form of ECMAScript 2017 (ES8), which includes everything you'll need to get started with JavaScript and have a basic-to-advanced ...
animations-css-ecmascript 根据此视频,使用CSS和ecmascript学习动画: [ ]格式Animado com JS puro e CSS动画| Mayk Brito
ECMAScript Javascript Promise 详解
Visual-Studio-2015-CTP-6-and-ECMAScript-6 Visual Studio 2015 CTP 6 和 ECMAScript 6
3c_js.chm ECMAScript 6入门.pdf JavaScript 5.chm 高性能JavaScript.2015年.pdf
ecmascript-object-observe ECMAScript Object.observe规范建议 可读规范位于 。 此规范提案使用来生成HTML运行 npm install -g ecmarkdown mkdir out ecmarkdown spec/index.html out/index.html cp css/elements...
Ecmascript崇高语法Ecmascript / Javascript / ES6 / ES2015 / Babel或您拥有的东西的崇高语法语言定义。 Sublime语法仅在Sublime Text 3.0中可用。 1.6的新功能嵌套语法突出显示多行模板文字的常见用法是嵌入代码段...
正值js红宝书第四版上市,出于兴趣我便从基础重新学习了这门语言,对于很多原理性的问题都不很了解,所以我觉得是有必要完整阅读一下ECMAScript文档的。对于大多数像我这样的初级javascript程序员(虽然我现在还不是...