关于javascript里面的this,下面函数的执行结果是怎么得来的

关于javascript里面的this,下面函数的执行结果是怎么得来的,第1张

这是一个文字表述起来很麻烦的问题,解释之前先记住一下几点:

Point 1 : 使用 var 声明一个变量,变量声明会被提前到作用域最的最前面,也就是说无论你在什么地方 var 一个变量,这个变量都在代码一开始就被声明了,在函数内声明的变量也是如此

Point 2:所有的函数在被当做函数执行的时候,this 都指向 window(global),ES6除外

然后说你的那段代码:

定义了一个全局的 num = 1;

定一个 obj,并且有一个属性 num = 2

obj 有一属性 fn,fn 的值是通过自动执行函数返回的 function

自动执行函数构成了一个闭包

以上是几个关键的点,下面解释一下 fn :

根据 上文 Point 1 和 Point 2 来看,实际上 fn 的代码等价于下面的代码:

fn : ( function() {

    var num; // 根据 Point 1,num 在函数中的声明被提到最前

    windownum += 10; // 根据上文 Point 2,函数在自动执行过程中,this 指向的是 global

    

    num = num + 10; // num 被声明,但是没有赋值,所以 num == undefined,所以 num + 10 会是 NaN

    

    num = 3; // num 被赋值为 3

    

    return function() {

        

        thisnum += 10;

        

        num++; // 这个作用域内没有 num,但是因为形成了闭包,所以这个 num 是外层函数的 num,就是被赋值成了 3 的那个。

        

        consolelog( num );

    

    }

} )()

下面看你执行的代码:

var fn=objfn; fn();

num 初始值是3, 所以 num++ 是 4,同时 fn 被以普通函数来执行,所以里面的 this 指向 window,thisnum 改变的是最外层 num 的值,最外层的 num 这时候等于 21 了(在函数自动执行的时候还 + 过10)。

objfn();

再执行一次 num++ 值是 5,fn 是被作为 obj 的属性执行的,所以 fn 里面的 this 指向的是 objnum,所以 objnum 等于 12

consolelog( num ); 

这个 num 是最外层的 num。

consolelog( objnum );

这个没什么需要说的了。

1arguments,伪数组,包含函数中所有的参数

2函数如果不给任何条件,那么this默认指向window

3如果要指定this就通过call来传this

fncall(1)

如果传的this不是对象,那么js会自动帮忙封装为对象 

这时的this是1对象

如何声明的时候不转化为对象呢

function fn(){

'use strict'

consolelog(this)

}

fncall(1),this就是1

fcall(1,2,3,4)

此时对象1就是this,234就是arguments

4this是隐藏参数,arguments是显示参数

5let person={

name:'frank',

sayHi(){

consolelog("你好,我叫"+personname)}

}

我们可以用直接保存了对象地址的变量获取name

这种方法称为引用:变量保存了对象的地址

6js在每一个函数都加上一个this,用this获取目前还不知道名字的对象

7call指定this

fncall(this,参数1,参数2)

这是jquery的插件,(function($){})应该是(function($){})(jQuery),也就是把jQuery对像传进函数里面去,用$表示,以防外部的$被误改变或jquery指定不能用$时(兼容其它框架),而造致jquery功能的失效。和$(function(){})是两回事,这个是执行一个匿名函数

$fnwBox就是jquery自定义的功能,等同于$prototypewBox,后面跟的是参数,用的是json对象。

用jQuery自带方法/函数来获取outerHTML属性的方法:

1、定义方法outerHTML:

jQueryfnouterHTML = function(s) {

return s

thisbefore(s)remove()

: jQuery("<p>")append(thiseq(0)clone())html();

};

2、举例如下:

有如下html标签:<div id="xxx"><p>Hello World</p></div>获取Hello World的方法:

outerHTML('<p>Hello World</p>');

3、输出结果:

Hello World

function fn1(obj){

    var $li = $(obj)parent();

    var spclass = $lidata("spclass");

}

以上就是关于关于javascript里面的this,下面函数的执行结果是怎么得来的全部的内容,包括:关于javascript里面的this,下面函数的执行结果是怎么得来的、JS中的arguments和this、js中的$.fn.wBox是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9517349.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存