函数内部的属性:
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基础知识总结:函数的更多相关文章

  1. Node.js基础知识

    Node.js入门   Node.js     Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...

  2. [JS复习] JS 基础知识

    项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display  :inline or bloc ...

  3. HTML+CSS+JS基础知识

    HTML+CSS+JS基础知识 目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="sty ...

  4. 网站开发进阶(十五)JS基础知识充电站

    JS基础知识充电站 1.javascript alert弹出对话框时确定和取消两个按钮返回值? 用的不是alert对话框,是confirm confirm(str); 参数str:你要说的话或问题: ...

  5. NodeJs>------->>第三章:Node.js基础知识

    第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info  方法 console.log(" node app1.js 1> ...

  6. JS基础知识笔记

    2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...

  7. JS基础知识总结

      js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划() ...

  8. js基础知识温习:Javascript中如何模拟私有方法

    本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...

  9. js基础知识总结(2016.11.1)

    js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...

  10. Js基础知识(一) - 变量

    js基础 - 变量 *大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源.书籍.课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量类型来说一说js 变量类型 ...

随机推荐

  1. oracle2c-r2(12.2.0.1) 的镜像

    docker- 构建 oracle2c-r2(12.2.0.1) 的镜像   需求 由于公司的数据库需要使用新的oracle版本(12c-r2 -->12.2.0.1),从之前的oracle11 ...

  2. iOS 下载功能:断点下载(暂停和开始)(NSURLConnectionDataDelegate方法)

    1,model文件代码 文件名称:HMFileDownloader.h #import <Foundation/Foundation.h> @interface HMFileDownloa ...

  3. 【hdu 2376】Average distance

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=2376 [题意] 让你计算树上任意两点之间的距离的和. [题解] 算出每条边的两端有多少个节点设为n ...

  4. java基础——try catch final

    1.不管有木有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: 3.finally是在return后面的表达式运算后执行的(此时并没有 ...

  5. 详解第一个CUDA程序kernel.cu

    CUDA是一个基于NVIDIA GPU的并行计算平台和编程模型,通过调用CUDA提供的API,可以开发高性能的并行程序.CUDA安装好之后,会自动配置好VS编译环境,按照UCDA模板新建一个工程&qu ...

  6. python 快速排序 完整

    两头开始 以第一个为基准,从有往左,找第一个比基准数 大的,然后交换 从左往右,找第一个比基准数晓得,然后交换 遍历剩下的 基准数  左边的数们  以及  基准数 右边的数们 def quick_so ...

  7. c语言学习笔记(11)——枚举

    # include <stdio.h> enum WeekDay  //定义了一个数据类型(值只能写一下值) { MonDay, TuesDay, WednesDay, ThursDay, ...

  8. 并发-Java并发编程基础

    Java并发编程基础 并发 在计算机科学中,并发是指将一个程序,算法划分为若干个逻辑组成部分,这些部分可以以任何顺序进行执行,但与最终顺序执行的结果一致.并发可以在多核操作系统上显著的提高程序运行速度 ...

  9. [UWP开发]NavigationView基础使用方法

    原文:[UWP开发]NavigationView基础使用方法 [UWP开发]NavigationView基础使用方法 NavigationView是秋季创意者更新(16299)引入的新控件,用于生成W ...

  10. matlab 读写其他格式数据文件(excel)

    1. excel matlab和excel 中的数据互相导入 xlswrite() mat ⇒ excel 请问怎么把大容量的mat文件导出到excel文件中 – MATLAB中文论坛 % data. ...