手机版

详细解释这个关键字在JavaScript中的用法

时间:2021-10-29 来源:互联网 编辑:宝哥软件园 浏览:

这是函数内部的一个特殊对象,指的是执行函数所依据的环境对象(我们将在文末补充环境对象)。这个的值在调用函数之前是不确定的,不同的调用方法会导致这个值的变化。

window.num=22var o={ num : 11 };函数SayNum(){ alert(this . num)} SayNum();//22o . SayNum=SayNum;o . SayNum();//11请记住,函数名只是一个包含指针的变量。因此,即使在不同的环境中执行,全局sayNum()函数和o.sayNum()也指向同一个函数。

1.在全局范围内调用函数时,它在全局范围内被调用。这个对象指的是窗口。匿名函数的执行是全局的,所以它的这个对象通常指向window。

函数fn1(){ console . log(this);} fn1();2.通过新操作符调用这个引用一个实例对象。

函数Person(name){ this . name=name;} person . prototype . print name=function(){ alert(this . name);//拜伦};var p1=新人(“拜伦”);3.当对象引用对象时,方法调用此。

var obj1={ name: 'Byron ',fn : function(){ console . log(this);}};obj 1 . fn();4.间接调用和应用每个函数包含两个非继承的方法:调用()和应用()。这两种方法的目的是调用特定范围内的函数,实际上相当于在函数体中设置这个对象的值。也就是直接调用函数,调用时指定执行环境是谁。

window.color=' redvar o={ color : ' blue ' };函数SayColor(){ alert(this . color);} SayColor . call(this);//redsayColor.call(窗口);//RedSayColor . call(o);//blue(1)apply方法接收两个参数,一个是函数运行的范围,另一个是参数数组。

(2)调用方法调用方法与apply方法相同,不同的是接收参数的方式不同。对于call方法,第一个参数是这个的值没有改变,但是其他参数直接传递给函数。

function fn(){ console . log(this)//wind wow function InnerFn(){ console . log(this)} InnerFn . call(this)//window } fn();函数fn0(){ console . log(this)//window }函数fn1(){ fn0 . call(this);console.log(此);//window } fn1();函数fn0(){ console . log(this)//object } var o={ fn 1: function fn1(){ fn0 . call(this);console.log(此);//对象} } o . fn1();5.bind方法这个方法将创建函数的一个实例,它的这个值将绑定到传递给bind()函数的值。也就是说,将返回一个新的函数,函数内部的这个将是传入的第一个参数。

window.color=' redvar o={ color : ' blue ' };函数SayColor(){ alert(this . color)} var objectSayColor=SayColor . bind(o);objectSayColor();//蓝色补充说明:执行环境定义定义了函数可以访问的变量或其他数据。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都存储在这个对象中。我们的代码无法访问这个对象,但是解析器将在处理数据时在后台使用它。一、创造执行环境:

1.全局执行环境在web浏览器中,全局执行环境被视为窗口对象,因此所有的全局变量和函数都被创建为窗口对象的属性和方法。当代码被加载到浏览器中时,全局执行环境被创建(当我们关闭网页或浏览器时,全局执行环境被破坏)。

2.本地执行环境每个函数都有自己的执行环境,所以本地执行环境就是一个函数对象。调用函数时,创建函数的本地环境(执行函数中的代码后,环境被破坏,存储在其中的所有变量和函数定义都被破坏)。

这个执行环境和相关的变量对象是抽象概念,解释如下。

var a=1;函数fn(num1,num 2){ var b=2;函数fnInner(){ var c=3;警报(a b c);} fnInner();//fn内部调用时创建本地执行环境}fn(4,5);//fn调用时创建本地执行环境2016526161231569.jpg  (800179)

第二,作用域链javascript函数使用作用域链,它是在定义函数时创建的。当定义一个函数时,它实际上保存了一个范围链。调用此函数时,它会创建一个新对象来存储其局部变量,并将此对象添加到保存的范围链中。范围链的前端始终是当前执行代码所在环境的变量对象。作用域链的末端总是全局执行环境的变量对象。范围链的目的是确保执行环境有权访问的所有变量和函数都有权访问。

var作用域='全局作用域';function check scope(){ var scope=' local scope ';函数f(){返回范围};返回f;} check scope()();//local scope了解到在调用checkscope时,函数f是作为局部变量定义并绑定到checkscope的作用域链上的,所以这种绑定无论在哪里调用函数f都仍然有效,所以返回值是local scope。

var num1=1函数Outer(){ var num 2=2;console . log(num 1 num 2);//3函数Inner(){ //这里可以访问num3,num2,num1 var num3=3console . log(num 1 num 2 num 3);//6} //这里可以访问num2,Inner(),num1,但是不能访问num 3 Inner();} Outer();console . log(num 1);//1、执行环境//只能通过作用域链访问num1作用域链(search up) :内部环境,外部环境不能访问内部环境中的任何变量和函数。

var name='拜伦';函数fn(){ var name=' Csper ';console.log(名称);//Casper } fn();内部环境越多,可变权重越高。

注意:没有用var关键字直接声明的变量属于全局变量,比如直接声明a=1,此时a是全局变量。

当javscript引擎进入作用域时,它将分两轮处理代码。在第一轮中,初始化变量。其次,执行代码。

var a=1;函数监狱(a){ console . log(a);//1 var a;console . log(a);//1 }监狱(1);3.当函数执行函数调用并进入执行环境时,首先处理参数,初始化形式参数(默认值未定义),然后初始化函数中的函数声明,然后在逐步执行代码时初始化函数中的变量声明(当代码不在环境中执行时,该值未定义)。因此,函数的初始化顺序是形式参数、函数声明和变量声明。从上图图可以看到。我举个例子(整个全球环境也是一个函数)。

警报(fn类型);//函数,函数提前声明alert(fn0类型);//未定义,变量声明高级但未赋值函数fn(){//函数表达式}var fn0=function(){//函数定义} alert(type of fn0);//函数,当变量被赋值时。

版权声明:详细解释这个关键字在JavaScript中的用法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。