js基础知识总结:函数

函数内部的属性:
arguments 和this是函数内部的两个特殊对象
arguments:
function recursion(num){
    if(num<=1){
        return 1;
    }else{
        return num*recursion(num-1);
    }
}
另一种写法:
function recursion(num){
    if(num<=1){
        return 1;
    }else{
        return num*arguments.callee(num-1);
    }
}
arguments:表示当前参数的数组
arguments.callee 表示引用当前正在正在执行的函数,或者说是调用arguments.callee的函数
的引用,arguments.callee给匿名函数提供了一种自我引用的方式
var func=function(){
    alert(func===arguments.callee);
}
func();//调用该函数,我们得出的结果是true
从该例子我们可以看出func和arguments.callee对象的类型和值都相等。

callee属性的初始值就是正在执行的Function对象

caller:
    返回一个对函数的引用,该函数调用了当前函数

this 对象:
    this对象引用的是window(windwo是一个对象,而且是js当中最大的一个对象
    ,并且它是最外围的对象)
    alert(window);//[object window]
    alert(typeof window);//object    window 是对象 类型是对象 表示全局

    alert(this); // [object Window]  this 目前表示的是window,因为在window的范围下
    alert(typeof this);//object

    alert(this===window);//返回值为 true
    在“全局”变量下的this 就是window

    window.color=‘红色的‘;

    function sayColor(){
        //alert(this);// [object window]
        alert(this.color);//因为该函数 sayColor() 未赋值给一个对象 所以此处的this依然代表着window对象
    }
    sayColor();// 调用的是window下的color

    var box={
        color:‘蓝色的‘
    };
    box.sayColor=sayColor;将sayColor函数赋值给了 box对象的sayColor属性
    /*
        上边的代码其实就相当于
        var box={
            color:‘蓝色的‘,
            sayColor:function(){
                //alert(this);// [object Object]
                alert(this.color);
            }
        };
    */
    box.sayColor();//此处执行的是box里边的this.color
    //结果是 蓝色的

--------------------------------------------
<script type="text/javascript">
function box(num1,num2){
    return num1+num2;
}
//可以使用这种方式将sum函数转换成 box方法
function sum(num1,num2){
    return box.apply(this,[num1,num2]);//此处的this指的是window对象(将this换成window也是一样的),数组表示的是传递的参数
}
alert(sum(19,21));//返回的结果是40

->函数apply:
    语法:apply[[thisObj],[argArray]]
    定义:应用某一个对象的一个方法,用一个对象替换当前对象
    thisObj代表某一个对象 上述例子中这个对象是当前对象 this
    argArray表示用来替换当前对象的的对象的参数 数组

上述例子的另一个中写法
function sum2(num1,num2){
 return box.apply(this,arguments);//arguments代表的是box函数中参数的数组
}
alert(sum2(10,10));

->使用apply和call可以冒充另一个方法
    apply与call实现的效果是一样的
    call和apply不同的是 call中的参数是一个一个的,而apply则必须以数组的形式传递
function sum(num1,num2){
    return box.call(this,num1,num2);//注意参数的传递方式和apply的不同之处
}
alert(sum(10,10));

 冒充的作用:主要用于扩展函数赖以运行的作用域

 /*
    var color=‘红色‘;

    var box={
        color:‘蓝色‘
    };
    function sayColor(){
        alert(this.color);
    }
    //使用call 冒充 window对象
    sayColor.call(window);//红色  弹出的是window对象的 color
    sayColor.call(this);// 红色   弹出的样式window对象的color

    //使用call 冒充 box对象
    sayColor.call(box);//蓝色 弹出的是 box对象下的color属性

 */
  此时 可以看出 并没有给box对象添加 sayColor属性对象却可以执行出 sayColor的效果

js基础知识总结:函数

时间: 2024-08-21 21:29:58

js基础知识总结:函数的相关文章

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc

JS 基础知识4 运算符

JS的运算符一般含有: 1 算术运算符 2 相等运算符 3 关系运算符 4 字符串运算符 5逻辑运算符 6位运算符 7 赋值运算符 首先看算术运算符,它一般有(+,-,*,/,%,++,--) 这里,%模运算符,其实也就是取余的意思,比如,5%2=1: 这里要特别说一下++,与--(这里只列了++,--是一样的道理). 1 var i = 1; 2 var j = ++i; //实际相当于 i+=1;j=i; 3 alert(i + " " + j); 4 5 var m = 1; 6

JS 基础知识2 传值和传址

要知道传址跟传址,首先我们先了解下数据值的操作. 1复制:可以把它赋值给一个新的变量 2传递:可以将他传递给一个函数或者方法 3比较:可以与另外一个值比较,判断是否相等 简要介绍下传值: 当一个数据是通过值被操作的,那么关系到的是数据的值,在赋值的过程中,是对实际值进行了COPY,储存在一个变量或者属性或数组中,copy的值与原数据是相互独立的. 当数据通过值传递给一个函数时,数据的一份传递给这个函数,如果函数体修改了这个值,只在函数体受影响,函数外的原数据不受影响. 当一个数据通过值和另外一个

JS 基础知识3 变量

变量和数值相关,它储存了那个值,有了变量就可以储存操作数据了. js与其他语言不同,它是非类型的.就是变量可以存放任何类型的值,而其他语言需要存放特定类型的值. var i=5; i="fdsfad"; 这是合法的. 变量的声明一般是由VAR 关键字声明的 var i,sum; //一次声明两个变量,   若变量没有给定初始值,则值为“undefined” 在JS中多次声明同一个变量,是不会出错的,仅仅是给变量赋值的性质. 还有一种,不用var关键字声明变量,则JS会隐式的声明该变量,

JS基础知识回顾:ECMAScript的语法(一)

任何语言的核心都必然会描述这门语言最基本的工作原理,而描述的内容通常都要涉及这门语言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念. ECMAScript中的一切变量.函数名.操作符都区分大小写. ECMAScript的标识符要符合下列规则:第一个字符必须是字母.下划线或美元符号:其他字符可以是字母.下划线.美元符号或数字. 标识符中的字母也可以包含扩展的ASCII或Unicode字母字符,但是并不推荐. 按照惯例,ECMAScript标识符采用驼峰大小写的格式来书写,尽管没

JS基础知识回顾:引用类型(四)

每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法. 由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定. 函数的声明有以下三种形式: function sum(num1,num2){return num1+num2;}//利用函数声明语法定义 var sum=function(num1,num2){return num1+num2;}//利用函数表达式定义 var sum=new Function("num1","nu

JS基础知识回顾:引用类型(二)

ECMAScript中的Date类型是在早期Java中的java.util.Date类基础上构建的. 因此,Date类型使用自UTC(Coordinated Universal Time,国际协调时间)1970年1月1日午夜零点开始经过的毫秒数来保存日期. 在使用这种数据存储格式的条件下,Date类型保存的日期能够精确到1970年1月1日或之后的285616年. 要创建一个日期对象,使用new操作符和Date构造函数即可:var now=new Date(); 在调用Date构造函数而不传递参数

JS基础知识回顾:变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象. 引用类型的值是保存在内存中的对象,与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间. 在操作对象时,实际上是在操作对象的引用而不是实际的对象. 在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型的,ECMAScript放弃了这一传统. 定义基本类型值和引用类型值的方式是类似的:创建

Node.js基础知识杂烩

Node.js基础知识杂烩 这段时间做项目主要做关于服务器的功能点,因此,逐渐开始学习node.js写服务器,总体下来,觉得node比php更好用,写服务前器的速度更快,处理效率更高.注:node并不是专门写服务器的,其实node的出现,将js从web前端的专用语言,变成了一门通用语言.node中有各样的基础模块:比如fs,path,buffer,http,net等模块,此外,node还有各种各样的三方模块,比如写服务器人常用的express,co,koa,seqlize等著名框架,也就是三方模