函数里的两个特殊对象

一、函数内部两个特殊的对象:1 arguments(数组对象) 2 this
function sum(num){ //阶乘,递归
return num*sum(num-1);
}
sum(4);--24
function sum(num){
return num*arguments.callee(num-1);
}
sum(4)--24
arguments.callee();调用自身,实现函数递归
callee是arguments对象的属性,指向拥有这个arguments这个对象的函数。

二、window是个对象,是js里面最大的对象,是最外围的对象,表示全局。
var color="红色的";==window.color="红色的";==this.color="红色的";
1全局的变量是window对象下的属性
2在全局作用域中,this指的就是window对象。

var box={
color:"蓝色的", //这里的color是box下的属性,是局部变量box.color="蓝色的";
sayColor:function(){
alert(this.color); //这里的this指的box这个对象
}
}

三、函数是对象,所以也有自己的属性和方法,每个函数都包含的两个属性:length和prototype
1 length:函数的参数个数
function box(name,age){
return name+age;
}
alert(box.length);---2 即这个函数有两个参数

2 prototype下的两个方法:apply和call,使用它们,可以冒充另外一个函数去执行。
function box(num1,num2){
return num1+num2;
};
alert(box(10,10)); ----20

function sum(num1,num2){
return box.apply(this,[num1,num2]);
//this指的是window对象,因为box是在window作用域下的;[]数组里面是传递的参数,或者使用arguments代替[num1,num2]。
}
alert(sum(10,10));----20

function sum(num1,num2){
return box.call(this,num1,num2)
//call和apply的区别仅仅是传递参数不同,apply是数组形式,call是一个参数一个参数的传。
}

用场:
var color="红色的"; //全局的
var box={
color:“蓝色的” //局部的
}
function sayHello(){
alert(this.color);
}
alert(sayHello());---红色的 ,因为sayHello函数是在window全局作用域下,所以,this指的也是window。

如果使用call可以实现对象的冒充:
sayHello.call(window)==sayHello.call(this)----红色的 作用域在window下
sayHello.call(box) )----蓝色的 作用域在box下

耦合:互相关联

时间: 2024-10-09 21:30:14

函数里的两个特殊对象的相关文章

函数的上下文就是函数里面的this是谁

规律1:函数用圆括号调用,函数的上下文是window对象 比如小题目: function fun(){ var a = 888; alert(this.a); //实际上访问的是window.a } var a = 666; fun(); //弹出666 函数function fun(){}的上下文是什么!不要看它怎么定义,要看它怎么调用!!此时是fun()函数名加上圆括号直接调用,此时上下文就是window对象! 而我们知道:所有的全局变量都是window对象的属性,(注意:函数里面的局部变量

unity 3D里有两种动态加载机制

unity 3D里有两种动态加载机制: 一是Resources.Load: 一是通过AssetBundle: 其实两者本质上没有什么区别.Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的.其实场景里所有静态的对象也有这么一个加载过程,只是Unity后台替你自动完成了. 1.    AssetBundles是什么? 在一些大型的网络游戏,或者加载比较多的一些场景时,如果要等

第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 所在位置:django.http 之前我们用到的参数request就是HttpRequest     HttpRequest对象 逻辑处理函数的第一个形式参数,接收到的就是HttpRequest对象,这个对象里封装着用户的各种请求信息,通过

第11条:用zip函数同时遍历两个迭代器

核心知识点: (1)内置的zip函数可以平行地遍历多个迭代器. (2)python3中地zip相当于生成器,会在遍历过程中逐次产生元祖.而python2中地zip则是直接把这些元祖完全生成好,并一次性地返回整份列表. (3)如果提供地迭代器长度不等,那么zip就会自动提前终止. (4)itertools内置模块中地zip_longest函数可以平行地遍历多个迭代器,而不用在乎它们地长度是否相等. 在编写python代码时,我们通常要面对很多列表,而这些列表里的对象,可能也是相互关联的. 通过列表

c语言函数实现交换两个数的值

代码: 1 #include <stdio.h> 2 3 void swap(int x,int y) 4 { 5 int temp; 6 7 temp = x; 8 x = y; 9 y = temp; 10 printf("In swap: x = %d,y = %d\n",x,y); 11 } 12 13 void swap_with_pt(int * x,int * y) 14 { 15 int temp; 16 17 temp = *x; 18 *x = *y;

大数据行业里的两大误区

http://www.cognoschina.net/club/thread-68835-1-1.html http://www.cognoschina.net/club/thread-68837-1-1.html 大数据行业里的误区 大数据这个词,恐怕是近两年IT界炒的最热的词汇之一了,各种.会议,言必谈大数据,“大数据”这个词,在IT界已经成了某果一样的“街机”或者叫 “街词”,不跟风说两句“大数据长,大数据短”都不好意思跟人说自己是搞IT的.从某种程度来讲,大数据这个“圈”太乱了,一点不比

进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题

首先复习下普通函数里的this指向: 1 function test(){ 2 console.log(this) 3 } 4 test() 你会秒杀的毫无疑问的回答:window,针对普通函数:谁调用了函数  函数里的this就指向谁,test()等价于window.test(),所以是window 1 var name="outername" 2 var o={ 3 name:"innername", 4 getname:function(){ 5 consol

第十一天 函数名的使用以及第一类对象, 闭包, 迭代器

本节主要内容: 1.函数名的使用以及第一类对象 2.闭包 3.迭代器 一.函数名的运用 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量 1.函数名的内存地址: 2.函数名可以赋值给其他变量 3.函数名可以当作容器类的元素(作为list元素) 4.函数名可以当作函数的 5.函数名可以作为函数的返回值 二.闭包 什么是闭包: 闭包就是内层函数, 对外层函数(非全局)的变量的引用. 叫闭包 在内存函数中调用了外层函数的变量,叫闭包.可以让一个局部变量常驻内存 使用__closur

函数名的应用(第一对象) 闭包 装饰器

函数名的应用(第一对象). # 1,直接打印函数名得到的是函数的内存地址 <function func1 at 0x0000000002876B70> # print(func1) #2,函数名可以赋值运算. # def func1(): # print(666) # f1 = func1 # f1() # 3, 函数名可以作为函数的参数. # def func1(): # print(666) # # def func2(x): # x() # print(555) # func2(func