文档章节

Function类型

Romanceling
 Romanceling
发布于 2017/06/28 20:21
字数 333
阅读 7
收藏 0
  • callee:arguments对象的属性,该属性是一个指针,指向拥有这个arguments对象的函数.
            /*function factorial(num){
                if (num <= 1) {
                    return 1;
                } else {
                    return num * factorial(num-1)
                }
            }*///此方法等价于下面这个方法
    
            function factorial(num){
                if (num <= 1) {
                    return 1;
                } else {
                    return num * arguments.callee(num-1)
                }
            }
    
            var trueFactorial = factorial;
            
            factorial = function(){
                return 0;
            };
            
            alert(trueFactorial(5));   //120
            alert(factorial(5));       //0

     

  • 每个函数都有两个方法:apply()和call() 
  1. apply():接受两个参数:一个是在其中运行函数的作用域,另一个是参数数组.其中,第二个参数可以是Array实例,也可以是arguments对象.
            function sum(num1, num2){
                return num1 + num2;
            }
            
            function callSum1(num1, num2){
                return sum.apply(this, arguments);
            }
            
            function callSum2(num1, num2){
                return sum.apply(this, [num1, num2]);
            }
            
            alert(callSum1(10,10));   //20
            alert(callSum2(10,10));   //20

     

  2. call():第一个参数和apply一样,其余的参数是直接传.
            function sum(num1, num2){
                return num1 + num2;
            }
            
            function callSum(num1, num2){
                return sum.call(this, num1, num2);
            }
            
            alert(callSum(10,10));   //20
     
  • apply()和call()的真正用处:
        window.color = "red";
        var o = { color: "blue" };
        
        function sayColor(){
            alert(this.color);
        }
        
        sayColor();            //red
        
        sayColor.call(this);   //red
        sayColor.call(window); //red
        sayColor.call(o);      //blue
  • 函数还有一个方法:bind(),可以绑定函数的运行环境
            window.color = "red";
            var o = { color: "blue" };
                               
            function sayColor(){
                alert(this.color);
            }
            var objectSayColor = sayColor.bind(o);
            objectSayColor();   //blue

     

  • 函数还有一个length属性:表示函数希望接受的命名参数的个数
            function sayName(name){
                alert(name);
            }      
            
            function sum(num1, num2){
                return num1 + num2;
            }
            
            function sayHi(){
                alert("hi");
            }
            
            alert(sayName.length);  //1
            alert(sum.length);      //2
            alert(sayHi.length);    //0
     

© 著作权归作者所有

上一篇: Globale对象
下一篇: alert confirm
Romanceling
粉丝 14
博文 166
码字总数 91809
作品 0
无锡
程序员
私信 提问
javascript prototype介绍的文章

网上对于prototype的文章很多,一直没明白核心的思想。最后写了很多例子代码后才明白:prototype只能用在类型上。 JavaScript是基于对象的,任何元素都可以看成对象。然而,类型和对象是不同...

Richard_sun
2013/05/15
76
0
DevExtreme —— dxPopup

对话框。 收录于: dx.mobile.js, dx.web.js, dx.viz-web.js, dx.all.js 使用方法: jquery html js angular html 配置项: accessKey 类型:String 默认值:null 作用:快捷键,使用Alt + a...

夏末的萨克斯手
2016/08/25
76
0
js基础(一)数据类型

写在前面的话: 包括5种基本类型Undefined、Null、Boolean、Number和String。和一个复杂的数据类型(Object)。前面 的5种都好理解,但是Object类型因为返回值的问题,在后面比较容易和funct...

行者问行
2016/11/25
1
0
boost源码剖析之:泛型函数指针类boost::function(rev#3)

boost源码剖析之:泛型函数指针类boost::function(rev#3) 刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba) Note: 并非新作,03年曾放在blog上,现在这个版本应该是修改后的最终版本。 前奏...

长平狐
2012/08/28
229
0
ERROR:Invalid syntax for function signature in TLD

报错的log 严重: Servlet.service() for servlet jsp threw exceptionorg.apache.jasper.JasperException: Invalid syntax for function signature in TLD. Tag Library: 某某某, Function:......

C-Kellen
2016/02/25
87
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
696
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
39
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
25
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
74
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
73
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部