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. sql查询百分号的方法

    select * from [tablename] where [col] like '%100/%%' escape '/'

  2. 利用css的border实现画三角形思路原理

    1.利用Css 的border绘制三角形的原理: div的border是有宽度和颜色的,当div的宽度比较大的时候,比如上面代码每个边100像素,颜色又不一样,浏览器怎么渲染颜色呢?经测试发现,宽度较 ...

  3. Anton and Chess

    Anton and Chess time limit per test 4 seconds memory limit per test 256 megabytes input standard inp ...

  4. 集合工具类CollectionUtils、ListUtils、SetUtils、MapUtils探究

    之前一直以为集合工具类只有CollectionUtils,主要用它的isEmpty(final Collection<?> coll)静态方法来判断一个给定的集合是否为null或者是否长度 ...

  5. IDA_Python命令行使用

    Python>import idaapi Python>hex(idaapi.get_first_cref_from(here()))

  6. POJ 1845 Sumdiv (整数拆分+等比快速求和)

    当我们拆分完数据以后, A^B的所有约数之和为: sum = [1+p1+p1^2+...+p1^(a1*B)] * [1+p2+p2^2+...+p2^(a2*B)] *...*[1+pn+pn^2 ...

  7. Linux学习 -- 启动管理

    1 CentOS 6.x启动管理 系统运行级别 运行级别命令 #runlevel   查看级别 #init 运行级别  改变级别 系统默认运行级别 配置文件 /etc/inittab id:3:ini ...

  8. 基于IDL 的WebRS系统设计图

    图1 用例图 图2 结构图

  9. android 5.0新特性学习--视图轮廓

    ViewOutlineProvider -- 视图轮廓setOutlineProvider--可以使用View.setClipToOutline方法去剪切一个视图的outline区域.只有rectan ...

  10. If only it could be all the same like we first me

    为什么 你当时对我好 Why? You nice to me at that time. 又为什么 现在变得冷淡了 Why? Now you give a cold shoulder to me. 我 ...