Arguments对象

<script type="text/javascript">
/*
Arguments对象:
* 在Java中存在函数的重载现象.
* 节省了函数的命名空间.
* 降低了编码难度.
* 性能较好.
* 在javascript中也能实现函数的重载?
* 不存在函数的重载.
* 定义多个同名的函数时,只有最后一个是起作用.
* Arguments对象的作用:
* 在javascript中,函数定义没有任何参数,调用该函数时可以传递任意参数.
* Arguments对象是数组对象.
* Arguments对象的length属性:获取函数的实参的个数.
* 利用Arguments对象特性,实现模拟函数的重载的效果.
*/
function add(a, b){
return a + b;
}
function add(a, b, c){
return a + b + c ;
}
alert(add(1,2)); //output NaN:表示当前值不是一个数字.isNan():返回Boolean,判断是否不是数字.
alert(add(1,2,3)) //output 6
function fn(){
alert(arguments.length);
}
fn(); //output 0
fn("a"); //output 1
fn("a","b"); //output 2
fn("a","b","c"); //output 3
function add2(){
if(arguments.length==2){
return arguments[0] + arguments[1];
}else if(arguments.length==3){
return arguments[0] + arguments[1] + arguments[2];
}
}
alert(add2(1,2)); //output 3
alert(add2(1,2,3)); //output 6
</script>

变量的作用域

/*
javascript中的变量作用域:
* 全局变量:全局域+函数域.
* 局部变量:当前函数域.
*/
var a = "a";
function fn(){
var b = "b";
alert(a); //output a
alert(b); //output b
}
fn();
alert(a); //output a
alert(b); //未输出
/*
在javascript定义变量可以不使用"var".
在定义局部变量时,没有使用"var":
* javascript会自动将没有var的局部变量,定义为全局变量
需要注意的是:
* 依旧不建议大家这样编写代码.
*/
var a = "a";
function fn(){
b = "b";
alert(a); //output a
alert(b); //output b
}
fn();
alert(a); //output a
alert(b); //output b
/*
解读代码:
* 定义一个全局变量a,并初始化为a.
* 定义一个函数fn(),但该函数没有被调用(函数中的代码是不执行的)
* 该函数中,定义了局部变量a,但没有初始化.
* 调用函数fn(),执行该函数中的代码.
* 第一次打印变量a,打印的是局部变量a.
* 第二次打印变量a,打印的是局部变量a.
javascript的特点:
* javascript一次性定义代码中所有变量.
* 全局变量与局部变量同名时,在函数域中:只能访问局部变量.
*/
var a = "a";
function fn(){
alert(a); //output undefined
var a = "b";
alert(a); //output b
}
fn();
alert(a); //output a

特殊函数

/*
匿名函数:没有名的函数
* 定义函数的一种方式:var 函数名 = function(){}
* 将匿名函数作为参数,传递给另一个函数.
* 将匿名函数用来完成一次性任务.
回调函数:
* 将一个函数作为参数传递给另一个函数,而作为参数的函数,就叫做回调函数.
* 将一个匿名函数作为参数传递给另一个函数,而作为参数的匿名函数,就叫做匿名回调函数.
*/
var one = function(){return 1;}
var two = function(){return 2;}
// 形参a, b是一个函数.
function fn(a, b){
return a() + b();
}
alert(fn(one, two)); //output 3
// 将以上代码进行改写
alert(fn(function(){return 1;}, function(){return 2;})); //output 3
/*
什么是一次性:只能使用一次的.
* 一次性函数:
* 用来完成页面初始化工作的函数(不严格)
* 定义即调用的函数(不严格)
* 语法规定只能使用一次的.
* 自调函数:
* 第一个小括号:封装函数
* 第二个小括号:调用函数
*/
(
function(){
alert("this is javascript.");
}
)();
(
function(str){
alert(str + "this is javascript.");
}
)("hello ");
/*
内部(私有)函数:
* 与Java中的内部类很相似.
* 好处:保证了私有性.
* 与局部变量的作用是一样的.
*/
function fn(){
var a = "a";
function n(){
var b = "b";
alert(a);
alert(b);
}
n();
}
fn();//a b
/*
(了解)返回函数的函数(内部函数的一种特殊用法)
* 定义一个函数,可以执行两个逻辑体
*/
function fn(){
var a = "a";
return function(){
return a;
}
}
alert(fn()); //output function(){return a;}
alert(fn()()); //output a

预定义函数

javascript面向对象一:函数的更多相关文章

  1. JavaScript面向对象(01)--函数

    在JavaScript中,函数和对象有区别,也有联系, 首先函数是一个对象,但是和对象存在一些区别如下: 1,不论在java还是js中,如果把一个对象赋值给另一个变量,那么,后者会指向前者对象所在的内 ...

  2. JavaScript面向对象之函数构造器的理解

    1,在使用函数创建类时,函数本身也被称为该类的构造器,该类的构造器方法,该类的构造方法,该类的构造函数等等. 2,注意构造器方法是没有返回值的,当创建该类的实例时,必须调用该类的构造方法. 3,获取构 ...

  3. javascript面向对象属性函数用法(defineProperty与getOwnPropertyDescriptor)

    defineProperty用于设置一个对象的属性描述符,属性描述符有4个:[[Configurable]], [[Enumerable]], [[Writable]],[[Value]] 当一个属性 ...

  4. 02.JavaScript 面向对象精要--函数

    在JavaScript中,函数其实也是对象.是函数不同于其他对象的特点是:函数存在一个被称为[[Call]]的内部属性.[[Call]]属性是函数独有的,表明该对象可以被执行.ECMAScript 定 ...

  5. JavaScript面向对象—基本数据类型和引用数据类型的区别和变量及作用域(函数和变量)

    基本类型和引用类型的值 ECMAScript 变量可能包含两种不同的数据类型的值:基本类型值和引用类型值. 基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置. 而引用 ...

  6. JavaScript面向对象编程指南(三) 函数

    第3章 函数 3.1 什么是函数 函数:本质是一种代码的分组形式.函数的声明如下: <script type="text/javascript"> /*函数的声明组成: ...

  7. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  8. JavaScript面向对象

    理解对象 对象这个词如雷贯耳,同样出名的一句话:XXX语言中一切皆为对象! 对象究竟是什么?什么叫面向对象编程? 对象(object),台湾译作物件,是面向对象(Object Oriented)中的术 ...

  9. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  10. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

随机推荐

  1. [转]c++ new带括号和不带括号

    ref:http://m.blog.csdn.net/blog/u012745772/42420443 在new对象的时候有加上(),有不加(),不知道这个到底是什么区别?比如:CBase *base ...

  2. sql server两种分页方法

    方法一: --分页方法一 OrderID,CustomerID, EmployeeID,OrderDate,ShippedDate,ShipName,ShipAddress,Freight from ...

  3. C++矩阵处理库--Eigen初步使用

      项目要进行比较多的矩阵操作,特别是二维矩阵.刚开始做实验时,使用了动态二维数组,于是写了一堆Matrix函数,作矩阵的乘除加减求逆求行列式.实验做完了,开始做代码优化,发现Matrix.h文件里适 ...

  4. cakephp 复杂查询

    $now = time(); $this->CardTypeInfos->recursive = -1; $conditions = [ 'seller_id'=>SELLER_ID ...

  5. RACSignal的Subscription深入

    ReactiveCocoa是一个FRP的思想在Objective-C中的实现框架,目前在美团的项目中被广泛使用.对于ReactiveCocoa的基本用法,网上有很多相关的资料,本文不再讨论.RACSi ...

  6. Node.js学习 - Modules

    创建模块 当前目录:hello.js, main.js // hello.js exports.world = function() { // exports 对象把 world 作为模块的访问接口 ...

  7. 转:selenium webdriver 执行javascript代码

    在用selenium webdriver 编写web页面的自动化测试代码时,可能需要执行一些javascript代码,selenium本身就支持执行js,我们在代码中import org.openqa ...

  8. Linux中防火墙centos

    一般的防火墙用下面这些简单的配置都能达到目的 1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开 ...

  9. zf-表单填写以及相关业务流程

    这里是表单设置的地方 这是字段信息,如果设置了共享申请人名称的话 那么登记办件时,输入的申请人信息,会自动写入到这个字段中 还有这种,没设置共享的,那么就是申请后,自己输入信息即可 现在我们去申请办件 ...

  10. 转 ORACLE数据库它可以存储 中文 字节或字符

    一:因为ORACLE数据库它可以存储字节或字符,例如 CHAR(12 BYTE) CHAR(12 CHAR)的意义是不同的.一般来说默认是存储字节,你可以查看数据库参数NLS_LENGTH_SEMAN ...