函数内部的属性:
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. Android Activity 悬浮 半透明边框

    1.首先来创建一个Activity,在Activity的OnCreate函数里面我们设置它为全屏,然后设置Activity的宽高为全屏*0.9,然后设置背景图片为半透明的 .9 图片 .这样就已经是非 ...

  2. BZOJ 4264 小c找朋友 - hash

    传送门 题目大意: 给定一张无向图,求满足以下条件的点对 (x,y) 数目:对任意点 z (z!=x,y),边 (x,z) 和 (y,z) 同时存在或同时不存在. 题目分析: 首先要分析的出如果xy满 ...

  3. SpringMVC“Ambiguous mapping found. Cannot map 'XXXController' bean method”解决方法

    [转 :http://www.fanfanyu.cn/news/staticpagefile/2351.html] 最近在开发项目的过程中SpringMVC抛了个"Ambiguous map ...

  4. hadoop 3.x 启动过程中 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

    出现这种状况是因为当前账号没有配置ssh免密登录 进入到以下目录,查看是否生成过秘钥对,如果有的话直接ssh-copy-id 主机名 没有的话执行ssh-keygen -t rsa后再重新执行ssh- ...

  5. Qt中(图片)资源的三种使用方式

    Qt中使用图片资源的方法有很多种,以前我一直分不清各种之间的区别和Qt相应的处理机制,后来遇到一些实际的问题,然后再加上查阅源码和资料,总算弄明白一些事情,但是本文仅仅是个人理解,如有错误之处请告诉我 ...

  6. 设置vista和win7进入Debug模式

    转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家拍砖 设置vista和win7进入Debug模式: 1. bcdedit /copy  {curre ...

  7. 在动态THML语句中调用JS函数传递带空格参数的问题

    刚刚遇到一个问题,调用js函数的参数里带空格,造成调用失败的问题.   部分代码如下: html+="<div><a href=javascript:confirm(&qu ...

  8. 简明Python3教程 10.模块

    简介 现在你已经知道通过定义函数可以在你的程序中复用代码.但当你想在你编写的其他程序中复用大量函数怎么办呢? 也许你可以猜到了,办法就是利用模块. 有各种编写模块的方式,但最简单的方式是创建一个以.p ...

  9. 如何成为QTP专家

    关键字:QTP 自动化测试 专家地址:http://www.cnblogs.com/txw1958/archive/2012/11/20/how-to-become-qtp-guru.html Wou ...

  10. requireJS简单的学习门户网站

    总结 requireJS.这翻译成中国"必须js".说白了就是装js文件与.如何装好了?.这是继AMD标准化的模块化装.除了AMD另一种规范称为CMD规范.跟随CMD兼容模块加载. ...