内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

奇幻城国际娱乐

2019-02-11 出处:网络 整理:sesligaranti.com

    话题:JaScript变量作用域的问题

    回答:我来大概给你说一下,这个问题说起来有点复杂也有点绕了。你好好体会。在ja中,一切都是对象,函数也不例外。在一个函数被定义的时候, 会将它定义时刻的scope chain链接到这个函数对象的[[scope]]属.在一个函数对象被调用的时候,会创建一个对象(也就是一个对象), 然后对于每一个函数的形参,都命名为该对象的命名属, 然后将这个对象做为此时的作用域链(scope chain)最前端, 并将这个函数对象的[[scope]]加入到scope chain中.举个例子来说,假设有下面这样一个函数。该函数定义在lt;gt;内,是一个全函数var func = function(lps, rps){var name = 'laruence';..}在调用函数的时候会创建一个对象,假如叫做obj,那么lps和rps会作为obj对象的两个属存在。对于每一个在这个函数中申明的部变量和函数定义, 都作为该对象的同名命名属.然后将调用参数赋值给形参数,对于缺少的调用参数,赋值为undefined。然后将这个对象做为scope chain的最前端, 并将func的[[scope]]属所指向的,定义func时候的顶级对象, 加入到scope china.(作用域链)有了上面的作用域链, 在发生标识符解析的时候, 就会逆向当前scope chain列表的每一个对象的属,如果找到同名的就返回。找不到,那就是这个标识符没有被定义。所以,我们根据上述的原理来看一下你的函数。函数float在被调用时创建了一个对象obj(当然,这些是js编译器在执行的,我们无法见到)。函数没有参数,那么也就是说仅仅创建了一个对象obj,而这个对象是没有属的。上面说了。函数中调用的一切属,都被当作obj的属来处理,当用到该属时,会从obj对象的scope chain中查找。很显示你的obj对象是一个空对象,所以肯定无法targetImage 对象的。这里有点乱,虽然我已经尽量说的明白,但是你可能还需要自己体会一下希望我的回答能帮到你吧!~

    话题:JaScript作用域的问题

    回答:ith 是非常不好的语法惯,而且影响码。2。并不是所有的花括号都一段作用域,某个函数体内,是一段作用域JS 中所说的作用域,一般都是按函数来划分的。也就是说、 with 语法的作用,建议不要使用。===下面是 LZ 问题的解释 ===1,并不是 LZ 所说的那样。而是,JS 解释引擎遇到变量的时候,会优先在 with 指定的对象的属中寻找是否有符合的结果。如果没有找到,在 with 语句块中、 LZ 对 “作用域” 这个词理解有误,则按正常的变量来对待。以上

    参考回答:或者var o = new obj().fun2; f();这种形式调用, 那么函数内this就指向o;var f = o;那么this就依旧是指向希望对你能有所帮助;同样的定义方式; o.fun2()简单点说就是函数内的this指针的指向和定义它的位置和方式无关, 和调用的位置方式有关.如果你是用var o = new obj().fun2.call( );o, 如果换一种调用方法var o = new obj()

    话题:ja中作用域问题~

    回答:几乎很多语言都有一个不为人知的特,这是我在学as3时看到的也就是码的排序1.排在最前的是用function定义的函数例如下面这个例子showMessage();function showMessage(){msg();return true;function msg(){alert('hello');}}上面的例子会提示"hello"即使函数在return后定义,依然可以调用它2.第二位应该是由var定义的变量不过注意,虽然这些变量的定义提前到第二位了,但是他们的赋值语句其实没有被提前也就是说是一个undefined的值例子:var foo="foo";function showMessage(){if (false){var foo="bar";}alert(foo);}showMessage();上面的例子会提示"undefined"3.排在最后的当然就是剩下的语句了,当然包括语句块,它们是最后执行的可能你还对刚才一个例子有点疑惑,只要按照这个顺序重新排一下就清楚了function showMessage(){var foo;if (false){foo="bar";}alert(foo);}var foo;foo="foo";showMessage();记住了码的排序是在每一个作用域里(也就是脚本中或function中,但是let算不算我就不清楚了)都会进行的。而你的码里执行的顺序应该是下面这样的function myFun(){ alert("2!");}.myFun=function(){alert("1!")}myFun首先用function关键字定义了,然后由被一个赋值语句覆盖了,也就不存在了,所以总是执行赋值语句所定义的函数希望对你有些启发

    参考回答:要调用第二个 唯一的办法就是把他用括号括起来(function myFun(){alert("2!");})()

    话题:关于JS变量作用域的问题

    回答:v2=0,v3=401、这个v2和v3,都是a里面定义的部变量:function a(){ var v2, v3;2、v2=0,是调用b函数时,b函数直接对b外部的v2进行了赋值,最近的是a函数的v2,所以最终alert的v2是03、b函数虽然对v3赋值为0,但是v3是参数里的v3,

    参考回答:展开全部 v2=0,v3=401、这个v2和v3,都是a里面定义的部变量:function a(){ var v2, v3;2、v2=0,是调用b函数时,b函数直接对b外部的v2进行了赋值,最近的是a函数的v2,所以最终alert的v2是03、b函数虽然对v3赋值为0,但是v3是参数里的v3,并不是a函数的v3,对参数v3进行赋值,不会改变a函数的v3,所以alert的v3不变,还是40另外,楼上的回答虽然有一定道理,但是只是针对同一个人写同一个项目而言,实际的开发中,引用多个其它人开发的js,甚至其它开发的js都是常事,所以出现上面的类似码也是可能的,另外,这个例子对于理解js的变量作用域还是有一定意义的

    话题:js立即执行函数,作用域问题

    回答:js分为全作用域和函数作用域,全作用域在函数内部可以访问到,但是函数内部的变量,外部无法访问到var name = 'zhangsan';(function(){console.log(name) 这里因为变量提升,name === undefined,所以结果是undefinedvar name = 'lisi'console.log(name) 这里执行的是 name = lisi ,所以自然就是lisi了})()console.log(name) 函数的作用域,在全中无法访问,这里结果是三var name = 'zhangsan';(function(){console.log(name) 函数内部没有name 这个变量,所以像全查找,全有一个name,那么结果就是zhangsanname = 'lisi'console.log(name) 同理,这里结果是lisi,因为name被赋值成lisi})()console.log(name) lisi

    参考回答:数组索引要为整形 即xx[key] 中的key必须是整形的,你传的'v'+i 是不对的,应该这样写:(function() {a = function() {var xx = new array();for (var i = 1; i xx2(xx, i, 'x' + i);}alert("xx.length = " + xx.length); ??? 此处的xx.length为何等于0return xx;};xx2 = function(xx, key, value) {xx[key] = value;};var b = a();alert(b); 显示为何为空?})();

    话题:ja作用域的问题

    回答:this.name中的name是对象属,而单独一个name是变量,它们是不同概念,跟作用域无关

    参考回答:第一句输出的是: "undefined",而不是 "global"第二讲输出的是:"local"你可能会认为第一句会输出:"global",因为码还没执行var scope="local",所以肯定会输出“global"。我说这想法完全没错,只不过用错了对象。我们首先要分Ja的函数作用域与我们熟知的C/C++等的块级作用域。在C/C++中,花括号内中的每一段码都具有各自的作用域,而且变量在声明它们的码段之外是不可见的。而Ja压根没有块级作用域,而是函数作用域.所谓函数作用域就是说:-变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。所以根据函数作用域的意思,

    话题:关于JS变量作用域的问题

    回答:v2=0,v3=40brbr1、这个v2和v3,都是a里面定义的部变量:brfunction a(){br var v2, v3;brbr2、v2=0,是调用b函数时,b函数直接对b外部的v2进行了赋值,最近的是a函数的v2,所以最终alert的v2是0brbr3、b函数虽然对v3赋值为0,但是v3是参数里的v3,并不是a函数的v3,对参数v3进行赋值,不会改变a函数的v3,所以alert的v3不变,还是40brbr另外,楼上的回答虽然有一定道理,但是只是针对同一个人写同一个项目而言,br实际的开发中,引用多个其它人开发的js,甚至其它开发的js都是常事,所以出现上面的类似码也是可能的,另外,这个例子对于理解js的变量作用域还是有一定意义的

    参考回答:js不能用面向对象的方式理解。他的作用范围再这个循环所在的函数体内就是function 的{}内

    话题:ja中 with扩展作用域的问题?

    回答:现有如下码: 定义对象ar a = {name: 'hyjiacan',domain: '.'};要读取对象a里面的属,可以这样写:console.log(a.name);console.log(a.domain);但是为了码能更简单,特别是对象有很多属需要调用的时候,可以省略不少的码,也可以这样写:with(a) {console.log(name);console.log(domain);}这两种读取对象属的方式,结果是完全一样的。也就是说,使用了with,相当于在with后面的 {} 内可以直接调用 with()里面的参数的属。你看的书上的例子,也只是这个的一方面的应用。再举个例子给你:,有一个姓的人家,有,二明,,小明。当在外面(不在这个姓的家的时候),一般需要叫全名:,二明,,小明,而当在这个姓的家里的时候,可以只叫名,不带姓:,二明,,小明。而这个with就相当于将对象属的访问在了姓a的这一家。

    话题:ja作用域问题

    回答:a += b + c 这个时候相当于a=a+b+c 这个时候a=1;b=3;c=4 b, var了两次,为什么要b等于3?b取值于最近var的那个一次

    话题:ja的作用域问题???

    回答:在app函数中调用的factory函数。对吧。 调用factory时没有给他传参数,是吧。 那就相当于直接执行factory(),和app()一都没有。 在factory函数中,var name是一个部变量,已经给他赋值"ja",所以只能输出结果。 按你

    参考回答:展开全部 在app函数中调用的factory函数。对吧。 调用factory时没有给他传参数,是吧。 那就相当于直接执行factory(),和app()一都没有。 在factory函数中,var name是一个部变量,已经给他赋值"ja",所以只能输出结果。 按你的想法,应该这么写 var name = '';function factory(){ name = 'ja'; var io = function (){ alert('I am '+name); } return io;}function app(para){ name = para; var func = factory(){ func(); }}app('zlp');

分享给小伙伴们:

相关文章

搞笑图片