JavaScript基础学习(六)—函数
一、函数的定义
1.function语句形式
//1.function语句式
function test1(){
alert("I am test1");
} test1();
2.函数直接量形式
//2.函数直接量形式
var test2 = function(){
alert("I am test2");
}
test2();
3.通过Function构造函数形式
Function构造函数可以接收任意数量的参数,但最后一个参数始终都被看成函数体。我们不推荐使用,因为这种语法会导致解析两次代码,第一次是解析常规的JS代码,第二次是解析传入构造函数中的字符串,从而影响性能。
//3.通过Function构造函数形式
var test3 = new Function("a","b","return a + b");
alert(test3(10,20));
4.三种方式的区别

/*
* 测试解析时机
*/
test1();// I am test1
function test1(){
alert("I am test1");
} test2();//报错
var test2 = function(){
alert("I am test2");
} alert(test3(10,20));
var test3 = new Function("a","b","return a + b");
function语句是会被JS解析器优先解析。
/*
* 测试函数作用域
*/ var k = 1; function test(){
var k = 2; function demo(){
return k;
} var demo = function(){
return k;
} var demo = new Function("return k"); //1.function语句式: 2
//2.function字面量式: 2
//3.Function构造函数式: 1
alert(demo()); } test();
二、arguments对象
JavaScript中每个函数内都能访问一个特别的变量就是arguments。这个变量维护着所有传递到这个函数中的参数列表。arguments变量不是一个数组,但是在语法上有数组相关的属性length。但它不从Array.prototype继承,实际上它是一个对象。因此无法对arguments变量使用标准的数组方法,比如push、pop等。虽然使用for循环遍历是可以的,但是为了更好的使用数组方法,最好把它转换为一个真正的数组。
alert("arguments[0] = " + arguments[0]); //1
alert("arguments[1] = " + arguments[1]); //2
alert("arguments.length = " + arguments.length); //3
alert("arguments.callee.length = " + arguments.callee.length); //2
alert("arguments.callee = " + arguments.callee);
return a + b;
}
add(1,2,3);
从运行结果可以看出以下:
(1)arguments.length: 实参的个数。
(2)arguments.callee.length: 形参的个数。
(3)arguments.callee: 代表当前正在执行的函数,它可以在匿名函数中通过callee递归调用自身。
function add(a,b){
alert("arguments.callee.caller: " + arguments.callee.caller);
return a + b;
}
function test(a,b){
add(a,b);
}
test(1,2);
结果:

结论:
(1)arguments.callee.caller保存着调用当前函数的函数的引用。
JavaScript基础学习(六)—函数的更多相关文章
- JavaScript 基础学习1-day14
JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaS ...
- 48.javascript基础学习
javascript基础学习: http://www.w3school.com.cn/jsref/index.asp jS的引入方式: 1.行间事件:为某一个具体的元素标签赋予js内容,oncli ...
- JavaScript 基础 学习 (四)
JavaScript 基础 学习 (四) 解绑事件 dom级 事件解绑 元素.on事件类型 = null 因为赋值的关系,所以给事件赋值为 null 的时候 事件触发的时候,就没有事件处理 ...
- JavaScript 基础 学习(三)
JavaScript 基础 学习(三) 事件三要素 1.事件源: 绑定在谁身上的事件(和谁约定好) 2.事件类型: 绑定一个什么事件 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...
- JavaScript 基础学习(二)js 和 html 的结合方式
第一种 使用一个标签 <script type="text/javascript"> js代码; </script> 第二种 使用 script 标签,引入 ...
- JavaScript 基础 学习 (二)
JavaScript 基础 学习 节点属性 每一个节点都有自己的特点 这个节点属性就记录着属于自己节点的特点 1. nodeType(以一个数字来表示这个节点类型) 语法:节点.nodeT ...
- JavaScript 基础 学习 (一)
JavaScript 基础 学习 获取页面中的元素的方法 作用:通过各种方式获取页面中的元素 比如:id,类名,标签名,选择器 的方式来获取元素 伪数组: 长的和数组差不多,也是按照索引排 ...
- JavaScript基础学习-函数及作用域
函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...
- 几张非常有意义的JavaScript基础学习思维图
分享几张对于学习JavaScript基础知识非常有意义的图,无论你的JavaScript级别如何,“温故而知新”完全可以从这些图中得到. 推荐理由:归类非常好,非常全面 JavaScript 数组 J ...
随机推荐
- [Linux] PHP程序员玩转Linux系列-备份还原MySQL
1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 前几天有个新闻,说是g ...
- Appuim源码剖析(Bootstrap)
Appuim源码剖析(Bootstrap) SkySeraph Jan. 26th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www. ...
- java(jdk1.7) IO系列01之InputStream和OutputStream解析
1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,Inpu ...
- EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒
摘要 在ews中提供了一种拉通知的方式获取服务端邮件的操作,通过这种方式客户端可以订阅该通知,在邮箱有变化的时候,可以收到通知. 工作方式 EWS 通知是在订阅的基础上处理的.通常是一个订阅每个邮箱, ...
- 极光推送CTO黄鑫:技术人员要建立自己的知识图谱
本周,我们邀请到了极光推送CTO兼首席科学家黄鑫进行人物专访,在展示风采的同时,也分享会员们对技术.对工作.对人生的感悟. 扎实的底层服务是扩张关键 极光推送是一个做第三方云服务的公司,在 ...
- 去掉Dedecms幻灯片的标题文字和绿色背景
在操作dedecms站群中的站,因为看到首页的幻灯片Flash显示标题和文字,显得有点突兀,觉得应该去除dedecms 幻灯片默认的文字标题和背景,这样会感觉舒服些,下面教大家如何在模板当中去除ded ...
- HTML5之地理位置
在HTML5中,为window.navigator对象新增了一个geolocation属性,可以使用Geolocation API来对该属性进行访问,该属性存在以下三个方法. 获取当前地理位置 voi ...
- 从零开始学习Vue(三)
我们从一个例子来学习组件,vuejs2.0实战:仿豆瓣app项目,创建自定义组件tabbar 这个例子用到其他组件,对于初学者来说,一下子要了解那么多组件的使用,会变得一头雾水.所以我把这个例子改写了 ...
- 入坑系列之HAProxy负载均衡
在大型系统设计中用代理在负载均衡是最常见的一种方式,而相对靠谱的解决方案中Nginx.HAProxy.LVS.F5在各大场中用得比较普遍,各有各的优势和使用场景,由于本次要使用到TCP,因此Nginx ...
- JavaWeb---javabean
1.javabean 1.1--javabean的创建方法 1.2-javabean可以使用跟java一样的方法创建javabean实例 创建一个普通类Users(1.共有类 2.私有属性 3.无参构 ...