JavaScript--Function类型(11)

// 在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例;而且都与其他引用类型一样具有属性和方法;

// 由于函数是对象,因此函数名实际上也是一个指向函数对象的指针;

一 函数的声明方式

 1 1.普通的声明方式
 2     function box(num1,num2){
 3         return num1+num2;
 4     }
 5
 6 2.使用变量初始化函数
 7     var box = function(num1,num2){
 8         return num1+num2;
 9     }
10
11 3.使用Function构造函数
12     var box = new Function(‘num1‘,‘num2‘,‘return num1+num2‘);
13 // 第三种方式不推荐,这种语法会导致解析两次代码(第一次解析常规JS代码,第二次解析传入构造函数中的字符串),从而影响性能;
14 // 可以通过这种语法来理解"函数是对象,函数名是指针"的概念;

二 作为值的函数

 1 // JS中的函数名本身就是变量,所以函数也可以作为值来使用;
 2 // 也就是说,不仅可以像传参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回;
 3     function box(sumFunction,num){
 4         return sumFunction(num);
 5     }
 6     function sum(num){
 7         return num+10;
 8     }
 9     // 传递函数到另一个函数里;
10     var result = box(sum,10);            // =>20;

三 函数内部属性

 1 // 函数内部有两个特殊的对象:arguments和this;
 2
 3 // 1.arguments:是一个类数组对象,包含着传入函数中的所有参数,主要用途是保存函数参数;
 4 // arguments这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数;
 5     function box(num){
 6         if(num<=1){
 7             return 1;
 8         }else{
 9             return num*arguments.callee(num-1);    // 使用callee来执行本身;arguments.callee=box;
10         }
11     }
12
13 // 2.this:引用的是函数据以操作的对象,或者说函数调用语句所处的作用域;
14 // 当在全局作用域调用函数时,this对象引用的就是window;
15     window.color = "red";
16     alert(this.color);                // 打印全局的color;=>red;
17     var box = {
18         color:‘blue‘,
19         sayColor:function(){
20             alert(this.color);        // 打印局部的color;=>blue;
21         }
22     };

四 函数属性和方法

 1 // JS中的函数是对象,因此函数也有属性和方法;包含length和prototype;
 2
 3 // length属性:表示函数希望接收到命名参数的个数;
 4     function box(name,age){
 5         alert(name+age);
 6     }
 7     alert(box.length);                // 2s
 8
 9 // prototype属性:它是保存所有实例方法的真正所在,也就是原型;
10 // prototype包含两个方法:apply()和call(),每个函数都包含这两个非继承而来的方法;
11 // 这两个方法的用途都在特定的作用域中调用函数,实际上等于设置函数体内this对象的值;
12     var color = ‘red‘;
13     var box = {
14         color = ‘blue‘;
15     }
16     function sayColor({
17         alert(this.color);
18     });
19     sayColor();                     // 作用域在window;
20     sayColor.call(this);            // 作用域在window;
21     sayColor.call(window);          // 作用域在window;
22     sayColor.call(box);             // 作用域在box,对象冒充;=>red;
23 // 使用call(box)方法的时候,sayColor()方法的运行环境已经变成了box对象里了;
24 // 使用call()或apply()来扩充作用域的最大好处,就是对象不需要与方法发生任何耦合关系;
25 // 耦合:相互关联的意思,扩展和维护会发生连锁反应;
26 // 也就是说,box对象和sayColor()方法之间不会有多余的关联操作,比如:box.sayColor = sayColor;
27
28     function Animal(){
29         this.name = "Animal";
30         this.showName = function(){
31             alert(this.name);
32         }
33     }
34     function Cat(){
35         this.name = "Cat";
36     }
37     var animal = new Animal();
38     var cat = new Cat();
39     //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用。
40     //输入结果为"Cat"
41     animal.showName.call(cat,",");
42     //animal.showName.apply(cat,[]);
时间: 2024-10-12 19:20:51

JavaScript--Function类型(11)的相关文章

JavaScript:Function类型

在JavaScript中,函数实际是对象.每个函数都是Function类型的实例,而且都与其他类型一样具有属性和方法.函数声明方式: // 第一种:使用函数声明语法定义 function sum (num1, num2) { return num1 + num2; } // 第二种:使用函数表达式定义函数 var sum = function(num1, num2) { return num1 + num2; }; // 第三种:构造函数 var sum = new Function("num1

浅析JavaScript之Function类型

JavaScript中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上只是指向函数对象的指针,保存函数在堆内存中的地址值. 1.定义函数的三种方式: 1.1.函数声明方式 1 function sum(num1, num2){ 2 return num1 + num2; 3 } 1.2.函数表达式 1 var sum = function(num1, num2){ 2 return num1 + num2; 3

【JavaScript】Function类型

JavaScript中,每个函数都是Function类的一个实例. 也就是说每一个定义的函数名都是指向Function类型的一个实例. 函数名中存放的是函数的指针(Function类型实例指针). 可以使用Function的构造函数实现,最后一个参数被视为函数体,如: var sum = new Function("num1","num2","return num1+num2");   //不推荐 1.没有重载 因为函数名中存放的是指针,重新定义

JavaScript中的Function类型

函数实际上是对象,每个函数都是Function类型的实例,定义Function函数的方式如下: 1 //第一种:函数声明 2 function sum(num1,num2){ 3 return num1 + num2; 4 } 5 6 //第二种:函数表达式 7 var sum = function(num1,num2){ 8 return num1 + num2; 9 } 10 11 //第三种:Function构造函数 12 var sum = new Function("num1"

JavaScript之Function类型

以下的学习笔记来自于一本在 JavaScript 领域非常有名的书籍< JavaScript 高级程序设计(第 3 版)>,和 孔浩老师的视频教程(孔老师也是参考这本书,丰富了这本书上的内容).我只是一个知识的搬运工,以期通过搬运知识来加深对知识的理解. 函数是 ECMAScript 中最最有意思的部分,最最重要的部分.最有意思的根源在于:函数是对象. 函数就是一个非常特殊的对象,是一个 Function 类型的实例,其实在内存中存储的操作是通过一个键值对来存储的. 函数的第 1 种定义方式,

JavaScript基础——引用类型(三)Function类型

在ECMAScript中函数实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定.函数通常是使用函数声明语法定义的,如: function sum(num1 , num2){ returnnum1 + num2; } 这与下面使用函数表达式定义函数的方式几乎相差无几: var sum = function(num1 , num2){ returnnum1 + num2; };

转载自chaos_JS 的JavaScript中的Function类型浅析

1. Function类型是js中引用类型之一,每个函数实际上都是Function类型的实例对象,具有自己的属性和方法.正因为函数式对象,所以函数名实际上也是一个指向函数对象的指针. 2. 常用的函数定义方式 1. 函数声明: function sum(a , b ){ return a+b; } 2. 表达式: var sum = function(){ return a+b; }; //注意分号 //两种方式的区别: //解释器会率先读取函数声明,并使其在执行之前可以访问,而使用表达式则必须

JavaScript中的Function类型浅析

1. Function类型是js中引用类型之一,每个函数实际上都是Function类型的实例对象,具有自己的属性和方法.正因为函数式对象,所以函数名实际上也是一个指向函数对象的指针. 2. 常用的函数定义方式 1. 函数声明: function sum(a , b ){ return a+b; } 2. 表达式: var sum = function(){ return a+b; }; //注意分号 //两种方式的区别: //解释器会率先读取函数声明,并使其在执行之前可以访问,而使用表达式则必须

详解Javascript Function陷阱

Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascript函数有的时候也比较“任性”,你如果不了解它的“性情”,它很可能给你制造出一些意想不到的麻烦(bugs)出来. Javascript Function有两种类型: 1)函数声明(Function Declaration); // 函数声明 function funDeclaration(type){

JavaScript对象类型详解

JavaScript对象类型详解 JavaScrtip有六种数据类型,一种复杂的数据类型(引用类型),即Object对象类型,还有五种简单的数据类型(原始类型):Number.String.Boolean.Undefined和Null.其中,最核心的类型就是对象类型了.同时要注意,简单类型都是不可变的,而对象类型是可变的. 什么是对象 一个对象是一组简单数据类型(有时是引用数据类型)的无序列表,被存储为一系列的名-值对(name-value pairs).这个列表中的每一项被称为 属性(如果是函