文档库 最新最全的文档下载
当前位置:文档库 › JavaScript权威指南模板

JavaScript权威指南模板

JavaScript权威指南模板
JavaScript权威指南模板

JavaScript权威指南- 函数

函数本身就是一段JavaScript代码,定义一次但可能被调用任意次。如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法。用于初始化一个新创建的对象的函数被称作构造函数。

相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象。JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等。

JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量。这也就是所谓的“闭包”,它可以给JavaScript带来强劲的编程能力。

1.函数定义

函数使用function关键字定义,有函数语句和函数表达式两种定义方式。

//一.函数语句类:

//打印对象所有属性名称和值。

function printprops(obj) {

for (var key in obj) {

console.log(key + ":" + obj[key]);

}

}

//计算阶乘的递归函数,函数名称将成为函数内部的一个局部变量。

function factorial(n) {

if (n <= 1) return 1;

return n * factorial(n);

}

//二.函数表达式类:

//计算n的平方的函数表达式。这里将一个函数赋给一个变量。

var square = function (x) { return x * x; }

//兔子数列。函数表达式也可以包含名称,方便递归。

var foo = function foo(n) {

if (n <= 1) return 1;

else foo(n - 1) + foo(n - 2);

}

//数组元素升序排列。函数表达式也能作为参数传递给其他函数。

var data = [5, 3, 7, 2, 1];

data.sort(function (a, b) { return a - b; });

//函数表达式有时定义后立即调用。

var tensquared = (function (x) { return x * x; }(10));

函数命名

函数名称要求简洁、描述性强,因为这样可以极大改善代码的可读性,方便别人维护代码;函数名称通常是动词或以动词开头的词组。通常来说,函数名编写有两种约定:

一种约定是函数名第一个单词首字母小写,后续单词首字母大写,就像likeThis();

当函数名包含多个单词时,另一种约定是用下划线来分割单词,就像like_this()。

项目中编写方法名时尽量选择一种保持代码风格一致。还有,对于一些私有函数(不作为公用API的一部分),这种函数通常以一条下划线作为前辍。

2.函数调用

函数声明后需要通过调用才能被执行。JavaScript中通常有4种方式来调用函数:

作为普通函数;

作为对象方法;

作为构造函数;

通过它们的call()和apply()方法间接调用。

下面就通过一些具体示例来演示上述4中函数的调用方式。

1.对于普通函数,通过调用表达式就可直接调用,这种方式很直接也很常见。

//定义一个普通函数。

var strict = function () { return !this; }; //检测当前运行环境是否为严格模式。

//通过函数名直接调用。

console.log(strict());

注:根据ES3和非严格的ES5对普通函数调用的规定,调用上下文(this)是全局对象;在严格模式下,调用上下文则是undefined。

2.通常,保存在对象属性里的JavaScript函数被称作“方法”。

//定义一个对象直接量。

var calc = {

a: null,

b: null,

add: function () { //将函数保存在对象属性中。

return this.a + this.b;

}

};

//通过对象名调用方法。

calc.a = 1, calc.b = 2;

console.log(calc.add());

注:对象方法中的调用上下文(this)不同于普通函数中的上下文。这里this指代当前对象。

方法链:当方法返回值是一个对象,那么这个对象还可以再调用它的方法。每次调用的结果都是另外一个表达式的组成部分,这种方法调用方式最终会形成一个序列,也被称为“方法链”。所以,在自己设计API的时候,当方法并不需要返回值时,最好直接返回this。这样以后使用API就可以进行“链式调用”风格的编程。

需要注意的是,this是一个关键字,Javascript语法不允许给它赋值。再者,关键字this没有作用域的限制,嵌套的函数不会从外层调用它的函数中继承this。也就是说,如果嵌套函数作为方法调用,其this指向为调用它的对象。如果嵌套函数作为函数调用,其this值不是全局对象就是undefined。下面通过一段代码来具体说明。

var o = {

m: function () { //对象中的方法

var self = this; //将this的值保存在一个变量中

console.log(this === o); //输出true,表明this就是这个引用对象o

f(); //调用嵌套函数f()

function f() { //定义一个嵌套函数(**普通函数,非对象方法)

console.log(this === o); //输出false,this的值为全局对象或undefined

console.log(self === o); //输出true,变量self指外部函数的this值

}

}

}

3.如果函数或者防方法调用之前带有关键字new,它就构成构造函数调用。构造函数调用会创建一个新的对象,构造函数通常不使用return,函数体执行完毕它会显示返回。还有,创建的对象继承自构造函数的prototype属性,构造函数中使用this关键字来引用这个新创建的对象。

//与普通函数一样的定义方式。

function Person(name, age) {

https://www.wendangku.net/doc/4f3069601.html, = name;

this.age = age;

this.say = function () {

console.log("My name is " + https://www.wendangku.net/doc/4f3069601.html, + ", I am " + this.age + " years old.");

}

}

//用关键字new调用构造函数,实例化对象。

var obj = new Person("Lamb", "21");

obj.say();//调用对象方法。

4.我们知道Javascript中的函数也是对象,所以函数对象也是可以包含方法的,其中call()和apply()两个方法可以用来间接地调用函数,这两个方法都可以显式指定调用函数里面的调用上下文this。//定义一个打印函数。

function print() {

if (this.text) {

alert(this.text);

} else {

alert("undefined");

}

}

//call方法间接调用方法,并指定其调用上下文。

print.call({ text: "hello" });

关于call()和apply()两个方法的用法以及区别下面详细讨论。

3.函数的实参和形参

JavaScript中的函数定义不需要指定函数形参的类型,调用函数时也不检查传入形参的个数。这样,同时也会留下两个疑问给我们:

当调用函数时的实参个数和声明的形参个数不匹配的时候如何处理;

如何显式测试函数实参的类型,以避免非法的实参传入函数。

下面就简单介绍JavaScript是如何对上述两个问题做出处理的。

可选参数

当调用函数的时候传入的实参比函数定义时指定的形参个数要少,剩下的形参都将设置为undefined。一般来说,为了保持函数较好的适应性,都会给省略的参数设置一个合理的默认值。function getPropertyNames(obj,/*optional*/arr) {

arr=arr||[];

for (var property in obj) { arr.push(property); }

return arr;

}

需要注意的是,当使用这种可选实参来实现函数时,需要将可选实参放在实参列表的最后。一般来书,函数定义中使用注释/*optional*/来强调形参是可选的。

实参对象

当调用函数时传入的参数个数超过了原本函数定义的形参个数,那么方法中可以通过实参对象来获取,标识符arguments是指向实参对象的引用。实参对象是一个类数组对象,可以通过数字下标来访问传入函数的实参值。实参对象有一个重要的用处,就是让函数可以操作任意数量的实参,请看下面的例子:

//返回传入实参的最大值。

function max(/* ... */) {

var max = Number.NEGATIVE_INFINITY; //该值代表负无穷大。

for (var i = 0; i < arguments.length; i++) {

if (arguments[i] > max) {

max = arguments[i];

}

}

return max;

}

//调用。

var largest = max(10, 45, 66, 35, 21); //=>66

还有重要的一点,如果函数中修改arguments[]元素,同样会影响对应的实参变量。

除以上之外,实参对象还包含了两个属性callee和caller:

callee是ECMAScript标准规范的,它指代当前正在执行的函数。

caller是非标准属性但是大多数浏览器都支持,它指代当前正在执行函数的函数。

//callee可以用来递归匿名函数。

var sum = function (x) {

if (x <= 1) return 1;

return x + arguments.callee(x - 1);

}

//调用函数b,方法a中打印结果为函数b。

var a = function () {

alert(a.caller);

}

var b = function () {

a();

}

注意,在ECMAScript 5严格模式下,对这两个属性进行读写会产生一个类型错误。

实参类型

声明JavaScript函数时形参不需要指定类型,在形参传入函数体之前也不会做任何类型检查,但是JavaScript在必要的时候会进行类型转换,例如:

function mult(a, b) {

return a * b;

}

function conn(x, y) {

return x + y;

}

console.log(mult(3, "2")); //字符串类型自动转为数字类型,输出结果:6

console.log(conn(3, "2")); //数字类型自动转为字符串类型,输出结果:"32"

上述的两种类型存在隐式转换关系所以JS可以自动转换,但是还存在其他情况:比如,一个方法期望它第一个实参为数组,传入一个非数组的值就可能引发问题,这时就应当在函数体中添加实参类型检查逻辑。

4.作为值的函数

开篇提到过,在JavaScript中函数不仅是一种语法,函数即是对象,简单归纳函数具有的几种性质:

1.函数可以被赋值给一个变量;

function square(x) { return x * x; }

var s = square; //现在s和square指代同一个函数对象

square(5); //=>25

s(5); //=>25

2.函数可以保存在对象的属性或数组元素中;

var array = [function (x) { return x * x; }, 20];

3.函数可以作为参数传入另外一个函数;

//这里定义一些简单函数。

function add(x, y) { return x + y; }

function subtract(x, y) { return x - y; }

function multipty(x, y) { return x * y; }

function divide(x, y) { return x / y; }

//这里函数以上面某个函数做参数。

function operate(operator, num1, num2) {

return operator(num1, num2);

}

//调用函数计算(4*5)-(2+3)的值。

var result = operate(subtract, operate(multipty, 4, 5), operate(add, 2, 3));

console.log(result); //=>15

4.函数可以设置属性。

//初始化函数对象的计数器属性。

uniqueInteger.counter = 0;

//先返回计数器的值,然后计数器自增1。

function uniqueInteger() {

return uniqueInteger.counter+=1;

}

当函数需要一个“静态”变量来在调用时保持某个值不变,最方便的方式就是给函数定义属性,而不是定义全局变量,因为定义全局变量会让命名空间变的杂乱无章。

5.作为命名空间的函数

函数中声明的变量只在函数内部是有定义,不在任何函数内声明的变量是全局变量,它在JavaScript代码中的任何地方都是有定义的。JavaScript中没有办法声明只在一个代码块内可见的变量的。基于这个原因,常常需要定义一个函数用作临时的命名空间,在这个命名空间内定义的变量都不会污染到全局变量。

//该函数就可看作一个命名空间。

function mymodule() {

//该函数下的变量都变成了“mymodule”空间下的局部变量,不会污染全局变量。

}

//最后需要调用命名空间函数。

mymodule();

上段代码还是会暴露出一个全局变量:mymodule函数。更为常见的写法是,直接定义一个匿名函数,并在单个表达式中调用它:

//将上面mymodule()函数重写成匿名函数,结束定义并立即调用它。

(function () {

//模块代码。

}());

6.闭包

闭包是JavaScript中的一个难点。在理解闭包之前先要明白变量作用域和函数作用域链两个概念。

变量作用域:无非就是两种,全局变量和局部变量。全局变量拥有全局作用域,在任何地方都是有定义的。局部变量一般是指在函数内部定义的变量,它们只在函数内部有定义。

函数作用域链:我们知道JavaScript函数是可以嵌套的,子函数对象会一级一级地向上寻找所有父函数对象的变量。所以,父函数对象的所有变量,对子函数对象都是可见的,反之则不成立。需要知道的一点是,函数作用域链是在定义函数的时候创建的。

关于“闭包”的概念书本上定义很具体,但是也很抽象,很难理解。简单的理解,“闭包”就是定义在一个函数内部的函数(这么说并不准确,应该说闭包是函数的作用域)。

var scope = "global scope"; //全局变量

var scope = "local scope"; //局部变量

function f() { return scope; } //在作用域中返回这个值

return f();

}

checkscope(); //=>"local scope"

上面一段代码就就实现了一个简单的闭包,函数f()就是闭包。根据输出结果,可以看出闭包可以保存外层函数局部变量,通过闭包可以把函数内的变量暴露在全局作用域下。

闭包有什么作用呢?下面一段代码是上文利用函数属性定义的一个计数器函数,其实它存在一个问题:恶意代码可以修改counter属性值,从而让https://www.wendangku.net/doc/4f3069601.html,Integer函数计数出错。

//初始化函数对象的计数器属性。

uniqueInteger.counter = 0;

//先返回计数器的值,然后计数器自增1。

function uniqueInteger() {

return uniqueInteger.counter+=1;

}

闭包可捕捉到单个函数调用的局部变量,并将这些局部变量用作私有状态,故我们可以利用闭包的特性来重写uniqueInteger函数。

//利用闭包重写。

var uniqueInteger = (function () { //定义函数并立即调用

var counter = 0; //函数的私有状态

return function () {

return counter += 1;

};

})();

//调用。

uniqueInteger(); //=>1

uniqueInteger(); //=>2

uniqueInteger(); //=>3

当外部函数返回后,其他任何代码都无法访问counter变量,只有内部的函数才能访问。根据输出结果可以看出,闭包会使得函数中的变量都被保存在内存中,内存消耗大,所以要合理使用闭包。

像counter一样的私有变量在多个嵌套函数中都可以访问到它,因为这多个嵌套函数都共享同一个作用域链,看下面一段代码:

function counter() {

var n = 0;

return {

count: function () { return n += 1; },

reset: function () { n = 0; }

};

}

var c = counter(), d = counter(); //创建两个计时器

c.count(); //=>0

d.count(); //=>0 能看出它们互不干扰

c.reset(); //reset和count方法共享状态

c.count(); //=>0 因为重置了计数器c

d.count(); //=>1 而没有重置计数器d

书写闭包的时候还需注意一件事,this是JavaScript的关键字,而不是变量。因为闭包内的函数只能访问闭包内的变量,所以this必须要赋给that才能引用。绑定arguments的问题与之类似。var name = "The Window";

var object = {

name: "My Object",

getName: function () {

var that = this;

return function () {

return https://www.wendangku.net/doc/4f3069601.html,;

};

}

};

console.log(object.getName()()); //=>"My Object"

到这里如果你还不明白我在说什么,这里推荐两篇前辈们写的关于“闭包”的文章。

阮一峰,学习Javascript闭包(Closure)

russj,JavaScript 闭包的理解

7.函数属性、方法和构造函数

前文已经介绍过,在JavaScript中函数也是对象,它也可以像普通对象一样拥有属性和方法。

length属性

在函数体里,arguments.length表示传入函数的实参的个数。而函数本身的length属性表示的则是“形参”,也就是在函数调用时期望传入函数的实参个数。

function check(args) {

var actual = args.length; //参数的真实个数

var expected = args.callee.length; //期望的实参个数

if (actual!=expected) { //如果不同则抛出异常

throw Error("Expected "+ expected+"args;got "+ actual);

}

}

function f(x,y,z) {

check(arguments); //检查实参和形参个数是否一致。

return x + y + z;

}

prototype属性

每个函数都包含prototype属性,这个属性指向一个对象的引用,这个对象也就是原型对象。当将函数用作构造函数的时候,新创建的对象会从原型对象上继承属性。

call()方法和apply()方法

上文提到,这两个方法可以用来间接调用函数。call()和apply()的第一个实参表示要调用函数的母对象,它是调用上下文,在函数内通过this来引用母对象。假如要想把函数func()以对象obj 方法的形式来调用,可以这样:

func.call(obj);

func.apply(obj);

call()和apply()的区别之处是,第一个实参(调用上下文)之后的所有实参传入的方式不同。

func.call(obj, 1, 2); //实参可以为任意数量

func.apply(obj, [1, 2]); //实参都放在了一个数组中

下面看一个有意思的函数,他能将一个对象的方法替换为一个新方法。这个新方法“包裹”了原始方法,实现了AOP。

//调用原始方法之前和之后记录日志消息

function trace(o, m) {

var original = o[m]; //在闭包中保存原始方法

o[m] = function () { //定义新方法

console.log(new Date(), "Entering:", m); //输出日志消息

var result = original.apply(o, arguments); //调用原始方法

console.log(new Date(), "Exiting:", m); //输出日志消息

return result; //返回结果

}

}

这种动态修改已有方法的做法,也被称作“猴子补丁(monkey-patching)”。

bind()方法

bind()方法是ES5中新增的方法,这个方法的主要作用是将函数绑定至某个对象。该方法会返回一个新的函数,调用这个新的函数会将原始函数当作传入对象的方法来调用。

function func(y) { return this.x + y; } //待绑定的函数

var o = { x: 1 }; //将要绑定的对象

var f = func.bind(o);//通过调用f()来调用o.func()

f(2); //=>3

ES3中可以通过下面的代码来实现bind()方法:

if (!Function.prototype.bind) {

Function.prototype.bind = function (o /* , args */) {

//将this和arguments保存在变量中,以便在嵌套函数中使用。

var self = this, boundArgs = arguments;

//bind()方法返回的是一个函数。

return function () {

//创建一个参数列表,将传入bind()的第二个及后续的实参都传入这个函数。

var args = [], i;

for (var i = 1; i < boundArgs.length; i++) {

args.push(boundArgs[i]);

}

for (var i = 0; i < arguments.length; i++) {

args.push(boundArgs[i]);

}

//现在将self作为o的方法来调用,传入这些实参。

return self.apply(o,args);

}

}

}

Function()构造函数

定义函数时需要使用function关键字,但是函数还可以通过Function()构造函数来定义。Function()构造函数可以传入任意数量字符串实参,最后一个实参字符串表示函数体,每两条语句之间也需要用分号分隔。

var f = Function("x", "y", "return x*y;");

//等价于下面的函数

var f = function f(x, y) { return x * y; }

关于Function()构造函数需要注意以下几点:

Function()构造函数允许Javascript在运行时动态创建并编译函数;

每次调用Function()构造函数都会解析函数体并创建新的函数。如果将其放在循环代码块中执行,执行效率会受到影响;

最重要的一点,它所创建的函数并不是使用词法作用域,相反,函数体代码的编译总是会在顶层函数执行。比如下面代码所示:

var scope = "global scope";

function checkscope() {

var scope = "local scope";

return Function("return scope;"); //无法捕获局部作用域

}

checkscope(); //=>"global scope"

Function()构造函数可以看作是在全局作用域中执行的eval(),在实际开发中很少见到。

8.函数式编程

JavaScript中可以像操控对象一样操控函数,也就是说可以在JavaScript中应用函数式编程技术。

使用函数处理数组

假设有一个数组,数组元素都是数字,我们想要计算这些元素的平均值和标准差。可以利用map()和reduce()等数组方法来实现,符合函数式编程风格。//首先定义两个简单的函数。

var sum = function (x, y) { return x + y; }

var square = function (x) { return x * x }

//将上面的函数和数组方法配合使用计算出平均数和标准差。

var data = [1, 1, 3, 5, 5];

var mean = data.reduce(sum) / data.length;

var deviations = data.map(function (x) { return x - mean; });

var stddev = Math.sqrt(https://www.wendangku.net/doc/4f3069601.html,iations.map(square).reduce(sum) / (data.length - 1));

高阶函数

所谓高阶函数就是函数操作函数,它接收一个或多个函数作为参数,并返回一个新的函数。

//返回传入函数func返回值的逻辑非。

function not(func) {

return function () {

var result = func.apply(this, arguments);

return !result;

};

}

//判断传入参数a是否为偶数。

var even = function (x) {

return x % 2 === 0;

}

var odd = not(even); //odd为新的函数,所做的事和even()相反。

[1, 1, 3, 5, 5].every(odd); //=>true 每个元素都是奇数。

这里是一个更常见的例子,它接收两个函数f()和g(),并返回一个新的函数用以计算f(g())。

//返回一个新的函数,计算f(g(...))。

function compose(f, g) {

return function () {

//需要给f()传入一个参数,所以使用f()的call()方法。

//需要给g()传入很多参数,所以使用g()的apply()方法。

return f.call(this, g.apply(this, arguments));

}

}

var square = function (x) { return x * x; }

var sum = function (x, y) { return x + y; }

var squareofsum = compose(square, sum);

squareofsum(2, 3); //=>25

记忆

能将上次计算的结果缓存起来,在函数式编程当中,这种缓存技巧叫做“记忆”。下面的代码展示了一个高阶函数,memorize()接收一个函数作为实参,并返回带有记忆能力的函数。

//返回f()的带有记忆功能的版本。

function memorize(f) {

//将值保存在闭包中。

var cache = {};

return function () {

//将实参转换为字符串形式,并将其用做缓存的键。

var key = arguments.length + Array.prototype.join.call(arguments, ",");

if (key in cache) {

return cache[key];

} else {

return cache[key] = f.apply(this, arguments);

}

}

}

memorize()所返回的函数将它的实参数组转换成字符串,并将字符串用做缓存对象的属性名。如果缓存中存在这个值,则直接返回它,否则调用既定的函数对实参进行计算,将计算结果缓存起来并保存。下面代码展示了如何使用memorize():

//返回两个整数的最大公约数。

function gcd(a, b) {

var temp;

if (a < b) { //确保a >= b

temp = b;

b = a;

a = temp;

}

while (b != 0) { //这里是求最大公约数的欧几里德算法

temp = b;

b = a % b;

a = temp;

}

return a;

}

var gcdmemo = memorize(gcd);

gcdmemo(85, 187);

//当写一个递归函数时,往往需要实现记忆功能。

var factorial = memorize(function (n) {

return (n <= 1) ? 1 : n * factorial(n - 1);

});

factorial(5); //=>120

9.参考与扩展

本篇内容源自我对《JavaScript权威指南》第8章函数章节的阅读总结和代码实践。总结的比较粗糙,你也可通过原著或MDN更深入了解函数。

JavaScript入门教程(初学者不可多得的优秀入门教材,通俗易懂,专业术语通俗化)

第 1 章 JavaScript 语言入门 1 为什么学习 JavaScript
提要:Javascript 是学习脚本语言的首选。她兼容性好,绝大多数浏览器均支持 Javascript,而且她功能强大,实现简单方便,入门简单,即使是程序设计新手也可以非常 快速容易地使用 JavaScript 进行简单的编程。
Javascript 是由 Netscape 公司创造的一种脚本语言。为便于推广,被定为 javascript,但 是 javascript 与 java 是两门不相干的语言, 作用也不一样。 作为一门独立的编程语言, javascript 可以做很多的事情,但它最主流的应用还是在 Web 上——创建动态网页(即网页特效)。 Javascript 在网络上应用广泛, 几乎所有的动态网页里都能找到它的身影。 目前流行的 AJAX 也是依赖于 Javascript 而存在的。 Javascript 与 Jscript 也不是一门相同的语言, Jscript 和 vbscript 是微软开发的两种脚本语 言,微软,Netscape 公司以及其他语言开发商为减少 web 开发者的兼容麻烦,所以成立 ECMA , 该组 织 专 门制定 脚 本 语 言的 标 准 和规范 。 ECMA 制 定 的标 准脚 本 语 言 叫做 ECMAScript,Javascript 符合 ECMA 的标准,其实 Javascript 也可以叫做 ECMAScript. Jscript 也 ECMA 的标准, 但用户较少。vbscript 仅局限在微软的用户, Netscape 不支持。 概括地说,JavaScript 就是一种基于对象和事件驱动,并具有安全性能的脚本语言,脚 本语言简单理解就是在客户端的浏览器就可以互动响应处理程序的语言, 而不需要服务器的 处理和响应,当然 JavaScript 也可以做到与服务器的交互响应,而且功能也很强大。而相对 的服务器语言像 asp https://www.wendangku.net/doc/4f3069601.html, php jsp 等需要将命令上传服务器,由服务器处理后回传处理结 果。对象和事件是 JavaScript 的两个核心。 JavaScript 可以被嵌入到 HTML 文件中,不需要经过 Web 服务器就可以对用户操作作 出响应,使网页更好地与用户交互;在利用客户端个人电脑性能资源的同时,适当减小服务 器端的压力,并减少用户等待时间。
2 将 JavaScript 插入网页的方法
与在网页中插入 CSS 的方式相似,使用
language="javascript"表示使用 JavaScript 脚本语言,脚本语言还有 vbscript、 jsscript 等,如果没有 language 属性,表示默认使用 JavaScript 脚本。其中的...就是代 码的内容。例如:

javascript基础练习题

基础练习题 一、简单Java程序调试 1)以下哪个是Java应用程序main方法的有效定义? A. public static void main(); B. public static void main( String args ); C. public static void main( String args[] ); D. public static void main( Graphics g ); E. public static boolean main( String a[] ); 2) 编译和运行以下代码的结果为: public class MyMain{ public static void main(String argv){ System.out.println("Hello cruel world"); } } A.编译错误; B.运行输出"Hello cruel world"; C.编译无错,但运行时指示没有定义构造方法。 D.编译无错,但运行时指示没有正确定义main方法。 3)下列选项中不属于Java虚拟机的执行特点的一项是: A.异常处理B.多线程C.动态链接D.简单易学 4)不属于Java语言特点的一项是: A.分布式 B. 安全性 C. 编译执行 D.面向对象 5)以下程序的运行结果为: public class Test{ public static void main(String argv[ ]){ System.out.println("x="+5); } } A. 5 B. x=5 C. "x="+5 D. "x="5 6) 以下程序的运行结果为: public class Test{ public static void main(String argv[ ]){ System.out.println("good"+"morning"); } } A. goodmorning B. "good"+"morning" C. good morning D. good+morning 二、Java符号与表达式 1) 现有一个int类型的整数和一个double类型的数进行加法运算,则得到的结果类型为: A.int类型 B. double类型 C. float类型 D. long类型 2)下面程序段的输出结果是:

最新JavaScript_深度剖析(从入门到精通)

第一讲JavaScript语言概况 第二讲JavaScript基本数据结构 第三讲JavaScript程序构成 第四讲基于对象的JavaScript语言 第五讲创建新对象 第六讲使用内部对象系统 第七讲窗口及输入输出 第八讲WEB页面信息的交互 第九讲实现更复杂的交互 第一讲JavaScript语言概况 Internet时代,造就了我们新的工作和生活方式,其互联性、开放性和共享信息的模式,打破了传统信息传播方式的重重壁垒,为我们带来了新的机遇。随着计算机和信息时代的到来,人类社会前进的脚步在逐渐加快,每一天都有新的事情发生,每一天都在创造着奇迹。随着Internet技术的突飞猛进,各行各业都在加入Internet的行业中来。无论从管理方面,还是从商业角度来看,Internet都可以带来无限生机。通过Internet,可以实现地区、集体乃至个人的连接,从而达到一种“统一的和谐”。那么怎样把自己的或公司的信息资源加入到WWW 服务器,是广大用户日益关心的问题。采用超链技术(超文本和超媒体技术)是实现这个目标最简单的、最快速的手段和途径。具体实现这种手段的支持环境,那就是HTML 超文本标识语言。通过它们可制作所需的Web网页。 通过超文本(Hyper Text)和超媒体(Hyper Media)技术结合超链接(Hyper link)的链接功能将各种信息组织成网络结构(web),构成网络文档(Document),实现Internet上的“漫游”。通过HTML符号的描述就可以实现文字、表格、声音、图像、动画等多媒体信息的检索。 然而采用这种超链技术存在有一定的缺陷,那就是它只能提供一种静态的信息资源,缺少动态的客户端与服务器端的交互。虽然可通过CGI (Common Gateway Interface)通用网关接口实现一定的交互,但由于该方法编程较为复杂,因而在一段时间防碍了Internet技术的发展。而JavaScript的出现,无凝为Internet 网上用户带来了一线生机。可以这样说,JavaScript的出现是时代的需求,是当今的信息时代造就了JavaScript。 JavaScript的出现,它可以使得信息和用户之间不仅只是一种显示和浏览的关系,而是实现了一种实时的、动态的、可交式的表达能力。从而基于CGI静态的HTML页面将被可提供动态实时信息,并对客户操作进行反应的Web页面的取代。JavaScript脚本正是满足这种需求而产生的语言。它深受广泛用户的喜爱的

JAVASCRIPT从入门到精通读书笔记

《JavaScript从入门到精通》读书笔记 今年的学习计划要读的书是《JavaScript权威指南》,里面内容比较有深度,所以决定买了比较好理解的《JavaScript从入门到精通》开始学习。 此书前半部分还是比较基础,平时工作中都能用得到,后半部分涉及到了Ajax、本地数据存储、离线应用和canvas图形等比较高级的用法。 首先主要介绍了JavaScript的发展历史版本变化,了解一下就可以。 初次使用JavaScript,重点讲了JavaScript的”字符串。例如。浏览器在加载如下代码就会产生一个错误。”); } Hi(); 错误原因:当浏览器解析到字符串””时,会结束JavaScript代码段的执行。解决方法: 使用转义字符把字符串‘’分成两部分来写就不会造成浏览器的误解。 代码测试和错误处理,理解浏览器的不同内核和代码不同的兼容性,在不同浏览器代码报错的时候会有不同的调试方法,学会使用浏览器的调试器对网页开发效率会有很大的提高。现在主流的浏览器是Chrome、Firefox、Safari等。 JavaScript的基本语法和各种变量,各种数据类型及各种数据类型的转换。 重点:避免变量污染 Var foo = function(){ Var a = 1, b = 2; Var bar = function(){ Var b = 3, c=4, //a= 1,b =3, c=4 a+=b + c; // a=8, b=3, c=4 }; //a=1, b=2, c = undefined bar(); //a= 21,b=2,c= undefined } JavaScript运算符的使用。JavaScript定义了51个运算符,主要分为一下几大类,位运算符、算术运算符、逻辑运算符、关系运算符、赋值运算符、对象炒作运算符和其他运算符。设计程序结构。程序都是由一个或多个语句组成的集合,语句表示一个可以执行的命令。用来完成特定的任务。大部分语句用于流程控制,在JavaScript中提供了if条件判断语句、switch多分枝语句、for循环语句、while循环语句、do/while循环语句、break语句、continue语句等7种流行控制语句。

JavaScript API入门指导

JavaScript API入门指导 天地图有限公司 2014年1月

Web API介绍 天地图Web API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中制作各种类型、行业的地图应用,还可以使地图功能够以模块化集成在不同类型的系统应用中。 面向用户 天地图Web API面向的读者是有一定JavaScript编程经验的读者,此外,读者还应该对地图产品有一定的了解。初级程序员通过1-2天的学习,即可掌握API的使用。 获取API 地图API是由JavaScript语言编写的,您在使用之前需要通过之间。

之间的是文本类型(text),ja vascript是为了告诉浏览器里面的文本是属于JavaScript语言。 我也可以独立(引用JS外部文件) 通过前面知识学习,我们知道使用 对象可以拥有方法,而变量可以在方法中使用,方法可以返回变量或者改变变量,而且方法可以调用方法 给标签命名的意义就在于,可以在脚本中调用这个标签,相应地就可以控制这个标签的相关属性,并且进行修改。 主要就是带大家入门,让大家知道网页编写,看似容易,其实容易的是外表,内在还是有许多的需要学习的。 入门,主要是让大家有个宏观的看法,同时让大家从代码中了解一些自己从未从未接触的知识。 大家仔细了解一下不懂的标签、方法,就可以触类旁通,举一反三。

JavaScript从入门到精通

JavaScript从入门到精通 DATAGURU专业数据分析社区 JavaScript从入门到精通马耿彬

JavaScript从入门到精通马耿彬DATAGURU专业数据分析社区 JavaScript简介 ?在上个世纪的1995年,当时的网景公司正凭借其Navigator浏览器成为Web时代开启时最著名的 第一代互联网公司。由于网景公司希望能在静态HTML页面上添加一些动态效果,于是叫Brendan Eich的同学在两周之内设计出了JavaScript语言 ?为什么起名叫JavaScript?原因是当时Java语言非常红火,所以网景公司希望借Java的名气来推广 ,但事实上JavaScript除了语法上有点像Java,其他部分基本上没啥关系。 ?因为网景开发了JavaScript,一年后微软又模仿JavaScript开发了JScript,为了让JavaScript成为 全球标准,几个公司联合ECMA(European Computer Manufacturers Association)组织定制了JavaScript语言的标准,被称为ECMAScript标准。 ?言而简之,ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实 现。

JavaScript从入门到精通马耿彬DATAGURU专业数据分析社区 为什么要学JavaScript ?JavaScript是世界上最流行的脚本语言,因为你在电脑、手机、平板上浏览的所有的网页,以及无 数基于HTML5的手机App,交互逻辑都是由JavaScript驱动的。 ?简单地说,JavaScript是一种运行在浏览器中的解释型的编程语言。 ?JavaScript一度被认为是一种玩具编程语言,它有很多缺陷,所以不被大多数后端开发人员所重视 。很多人认为,写JavaScript代码很简单,并且JavaScript只是为了在网页上添加一点交互和动画效果。 ?但这是完全错误的理解。JavaScript确实很容易上手,但其精髓却不为大多数开发人员所熟知。编 写高质量的JavaScript代码更是难上加难。

【免费下载】JavaScript基础教程

1.只需在里面加入代码即可 2.链接外部js代码 3.Js代码从上到下依次被解释,通常放在body标签内内容标签的后面 4.标识符:字母,数字,下划线,美元符号$,开头不能有数字,以驼峰式书写 5.JavaScript有6种数据类型(undefined,null,number,boolean,string5 种基本数据类型),(object一种复杂数据类型) 6.不支持js时可以使用来过渡 7.注释有单行注释和块级注释两种://单行注释、/*和*/ 8.ECMAscript的变量是松散类型的,所谓松散类型就是可以用来保存任何数 据类型 9.定义变量使用var操作符,用typeof操作符检测,只定义变量没有赋值, 变量默认保存undefined,虽然没有经过定义的变量也会返回undefined,但两者区别是不一样的,一个是默认保存undefined,另一个会报错 10.在函数内部用var定义变量时,变量为局部变量,不用var时为全局变量 (但不推荐使用),局部作用域里定义全局变量不好维护 11.一个var操作符可以定义多个变量,用逗号隔开即可, 12.null表示一个空对象指针,用typeof检测返回object,当定义一个变量需 要保存对象而还没有保存的时候可以定义为null,if(car!=null)可以检测变量是否存入对象, 13.实际上,undefined值是派生自null值的,alert(undefined==null)返回 true,undefined不需要显式的给变量赋值undefined,系统默认保存,而null需要明确的让变量保存null 14.Boolean类型只有两个true和false,任何非空字符串,任何非零数字,任 何对象都可以转换为true,空字符串,0和NaN,null,undefined可以转换为false 15.Number类型分为整型(十进制,八进制,十六进制),浮点型。

JavaScript入门经典课后习题答案

第一章开启JavaScript开发之门 问答题 1.JavaScript的特点主要有:解释性、基于对象、事件驱动、跨平台、安全 性。 2.常用的编写JavaScript的工具:Dreamweaver、FrontPage。 3.在页面中嵌入JavaScript脚本使用标记。 4.在页面中链接外部JavaScript脚本文件使用 第二章固本求源——JavaScript基础 问答题 1.JavaScript中是区分大小写的。 2.在JavaScript中定义常量使用const语句,语法如下: const 常量名=值; 3.JavaScript中数字型数据主要有整型数据、十六进制数据、八进制数据和 浮点型数据。 4. JavaScript中常见的运算符如下: (1)算术运算符

HTML CSS JavaScript 网页制作从入门到精通

HTML(Hyper Text Markup Language),是网页超文本标记语言,不是编程语言,而是一款描述性的标记语言,用于描述超文本中内容的显示方式。 HTML基本标记 一个完整的HTML文档必须包括3个部分:一个由元素定义的文档版本信息,一个由定义各项声明的文档头部和一个由定义的文档主体部分。作为各种声明信息的包含元素出现在文档顶端,并且要先于出现。而用来显示文档主体内容。 认识HTML标记 标记:它放在HTML的开头,表示网页文档的开始。 标记:出现在文档的起始部分,标明文档的头部信息,一般包括标题和主题信息,其结束标记指明文档标题部分的结束。 标记:用来指明文档的主体区域,网页所要显示的内容都放在这个区域。 保存:用记事本编辑语言之后,保存的扩展名为.html或.htm 一般用Dreamweaver编写HTML文件 在网页中单击鼠标右键——查看源文件,即可查看代码。 正文 1、HTML头部标记head 语法:…… 说明:元素的作用范围是整篇文档。元素中可以有元信息定义、文档样式表定义和脚本等信息,定义在HTML语言头部的内容往往不会直接显示在网页上。 2、标题标记title 语法:…… 说明:即页面标题 3、元信息标记meta 3.1设置页面关键字 语法: 说明:在搜索引擎中,检索信息是通过输入关键字来实现的。该语法中,name

零基础js入门练习题

1,什么是Javascript? 答:Javascipt是一种脚本语言,由web浏览器进行解释和执行。 2,JavaScript是由那几个部分组成? 答:主要分为以下三种: ECMAScript : 核心 DOM : 文档对象模型 BOM : 浏览器对象模型 3,请写出两种将Javascript的应用到网页的方式 答: 方法一:将javascript代码插入html文档部分的 方法二:将javascript代码存放在一个独立的文件。用.js作为文件的扩展名,再利用 4,如何定义一个变量?变量的命名规则有哪些? 答:变量由var运算符加变量名定义,如: varnum = 24; var name= ‘金团网’; 命名规则第一个字符必须是字母、下划线(_)、或美元符号($); 变量名中不能包含空格或标点符号($ 除外); 变量名区分大小写; 不能使用保留字; 为了让变量名有更好的可读性,可以在变量名中适当的插入下划线分隔,如:varmy_name = ‘金团网’; 5,Javascript的常用的几种数据类型有哪些?

JavaScript教程--从入门到精通

JavaScript教程--从入门到精通 JavaScript是由Netscape公司开发并随Navigator导航者一起发布的、介于Java与HTML之间、基于对象事件驱动的编程语言,正日益受到全球的关注。因它的开发环境简单,不需要Java编译器,而是直接运行在Web浏览器中,而因倍受Web设计者的所爱。 这一套JavaScript教程分九个章节从什么是JavaScript、JavaScript的简单应用一直介绍到如何用JavaScript实现复杂的交互,对于JavaScript初学者和进阶者来说,都是一部不可多得的优秀教程。 一、JavaScript语言概况 二、JavaScript基本数据结构 三、JavaScript程序构成 四、基于对象的JavaScript语言 五、创建新对象 六、使用内部对象系统 七、窗口及输入输出 八、WEB页面信息交互 九、实现更复杂交互 JavaScript教程语言概况 Internet时代,造就了我们新的工作和生活方式,其互联性、开放性和共享信息的模式,打破了传统信息传播方式的重重壁垒,为我们带来了新的机遇。随着计算机和信息时代的到来,人类社会前进的脚步在逐渐加快,每一天都有新的事情发生,每一天都在创造着奇迹。随着Internet技术的突飞猛进,各行各业都在加入Internet的行业中来。无论从管理方面,还是从商业角度来看,Internet都可以带来无限生机。通过Internet,可以实现地区、集体乃至个人的连接,从而达到一种“统一的和谐”。那么怎样把自己的或公司的信息资源加入到WWW 服务器,是广大用户日益关心的问题。采用超链技术(超文本和超媒体技术)是实现这个目标最简单的、最快速的手段和途径。具体实现这种手段的支持环境,那就是HTML超文本标识语言。通过它们可制作所需的Web网页。

相关文档
相关文档 最新文档