js分组选择度有什么用?var alert=(1,2,3) alert(a),结果为最后一个

网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&&>>&正文
javascript中错误使用var造成undefined
在javascript中根据变量作用的范围不同分为局部变量和全局变量,直接定义的变量是全局变量,全局变量可以被所有的脚本访问;在函数中定义的变量是局部变量,局部变量只在函数内有效。
如果全局变量和局部变量使用相同的变量名,则局部变量将会覆盖全局变量。
例子代码:
&!DOCTYPE html&
&meta charset="utf-8"&
&title&js中全局变量与局部变量&/title&
&script type="text/javascript"&
var a = "全局变量";
function test1()
var a = "局部变量";
function test2()
var a = "局部变量";
function test3()
a = "局部变量";
&input type="button" value="test1" onclick="test1()"/&
&input type="button" value="test2" onclick="test2()"/&
&input type="button" value="test3" onclick="test3()"/&
运行的结果是这样的:
点击test1 ,弹出局部变量。
点击test2,弹出undefined,再弹出局部变量
点击test3,弹出全局变量,再弹出局部变量
这就是使用var和不使用的区别所在:
如果使用var,那么程序会强制定义一个新变量。
如果没有使用var,系统会优先在当前上下文中搜索是否存在该变量,只有在不存在的前提下才会重新定义一个新变量。
test3中,使用的变量a均为全局变量,第一次直接输出了全局变量,第二次是直接为全局变量赋值之后使用。
test1和test2中都存在在function中使用var定义同名新变量,会导致函数中的变量覆盖掉全局变量。所以在test2中:第一次输出的a是已经被覆盖了的局部变量a,但是没有给予初值,所以会出现undefined这个结果。这样使用变量实际上是错误的,大家应该避免。
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:
[][][][][][][][][][]js array 去除重复字符 数字结构是var arr=[1,1,2,3,5,7,7] 要求得到2,3,5 重复就去掉_百度知道
js array 去除重复字符 数字结构是var arr=[1,1,2,3,5,7,7] 要求得到2,3,5 重复就去掉
var arr = [1,1,2,3,5,7,7],
len = arr.length,
resultArr1 = [],
resultArr2 = [];for(var i=0; i& i++){
var item1 = arr[i],
for(var j=0; j& j++){
if(j == i) {
var item2 = arr[j];
if(item1 == item2){
resultArr2.push(item2);
resultArr1.push(item1);
}}document.write(resultArr1 + &&br&& + resultArr2);
来自团队:
为您推荐:
其他2条回答
简单且,高级的算法在这里,带注释,再有不会的来问我。&html&&head&
&script type=&text/javascript&&var sampleArr = [1,1,2,3,5,7,7];function uniqueArr(a) {
temp = new Array();//一个交换数组
for (i = 0; i & a. i++) {//在此范围内执行
if (!cont旦龚测夹爻蝗诧伟超连ains(temp, a[i])) {//调用此函数
temp.length += 1;//长度加1
temp[temp.length - 1] = a[i];//存入我人要的值
return temp.sort();//排序后返回} function contains(a, e) {
for (j = 0; j & a. j++) if (a[j] == e)//若二者不相等则返回}alert(uniqueArr(sampleArr))
&/script&&/head&&body&&/body&&/html&
几位前辈写的真好,我受教了,谢谢大家
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁a标签一个 onClick()问题,需要一个写法_百度知道
a标签一个 onClick()问题,需要一个写法
jq写法忘记了&/3&)};a(3)&求jq写法;a href=& onClick=& &lt:void(0)&&/a&a(2)&/我记得以前见过的; onClick=&div&gt:void(0)&quot:void(0)&&//&lt:void(0)&&2&或者function a(1){ var a = $(this);///&a&2&javascript.val();/script&gt/ onClick=&/1&div&a href=& &3&lt:void(0)&a2()&quot:void(0)&&&a3()&/1&&&&a(4)&div&a&a& onClick=&&lt.val();div&)};a href=&&a&a href=&a href=&4&alert(a);/a href=&&lt:void(0)& onClick=&或者&&a href=&a4()&a href=& onClick=&/function a1(){ var a = $(this);/a&4&a&a(1)&script&a1()&& onClick=&quot:void(0)&/&gt,我需要点击哪个标签就操作那个标签&/alert(a);&//a& onClick=&quot
/a&alink&//div& class=&/&div&gt.alink&2&lt:void(0)&
alert(a);/ html&lt:void(0)&1&alink&quot.val();alink&
&lt:void(0)&3&a href=& class=&a href=&
&a&gt:void(0)& class=&a&).click(function() {
var a = $(this);&/&&#47?/a&a href=&& class=&;/alink& js$(&
&a href=&&4&})jquery 的写法;
我要的不是这个,是动态改变函数名或者参数的那种
// jsfunciton clickFunc() {
var a = $(this).val();
alert(a);}$(&.alink&).click(clickFunc);// 据我所了解的jquery, 它加click的方法都是这样注册的方式,然后通过元素的属性来进行需要的操作,如果这不是你要想要的,那就爱莫能助了 ....
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁代码如下:
var a = {n:1};
a.x = a = {n:2};
console.log(a.x);// --& undefined
console.log(b.x);// --& [object Object]
上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了&&&a.x不是指向对象a了么?为啥log(a.x)是undefined?&、&b.x不是应该跟a.x是一样的么?为啥log出来居然有2个对象&
当然各位可以先自行理解一下,若能看出其中的原因和工作机理自然就无须继续往下看啦。
下面来分析下这段简单代码的工作步骤,从而进一步理解js引用类型&赋值&的工作方式。
var a = {n:1};&&var b =
在这里a指向了一个对象{n:1}(我们姑且称它为对象A),b指向了a所指向的对象,也就是说,在这时候a和b都是指向对象A的:
这一步很好理解,接着继续看下一行非常重要的代码:
a.x = a = {n:2};
我们知道js的赋值运算顺序永远都是从右往左的,不过由于&.&是优先级最高的运算符,所以这行代码先&计算&了a.x。
这时候发生了这个事情&&a指向的对象{n:1}新增了属性x(虽然这个x是undefined的):
从图上可以看到,由于b跟a一样是指向对象A的,要表示A的x属性除了用a.x,自然也可以使用b.x来表示了。
接着,依循&从右往左&的赋值运算顺序先执行 a={n:2} ,这时候,a指向的对象发生了改变,变成了新对象{n:2}(我们称为对象B):
接着继续执行 a.x=a,很多人会认为这里是&对象B也新增了一个属性x,并指向对象B自己&
但实际上并非如此,由于( . &运算符最先计算)一开始js已经先计算了a.x,便已经解析了这个a.x是对象A的x,所以在同一条公式的情况下再回来给a.x赋值,也不会说重新解析这个a.x为对象B的x。
所以 a.x=a 应理解为对象A的属性x指向了对象B:
那么这时候结果就显而易见了。当console.log(a.x)的时候,a是指向对象B的,但对象B没有属性x。没关系,当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止。但当查找到达原型链的顶部 - 也就是 Object.prototype - 仍然没有找到指定的属性B.prototype.x,自然也就输出undefined;
而在console.log(b.x)的时候,由于b.x表示对象A的x属性,该属性是指向对象B,自然也输出了[object Object]了,注意这里的[object Object]可不是2个对象的意思,对象的字符串形式,是隐式调用了Object对象的toString()方法,形式是:"[object Object]"。所以[object Object]表示的就只是一个对象罢了:)
以上纯粹为个人对js引用类型工作方式的理解,若有不对的地方请指出谢谢 :)
随笔 - 124&&国之画&&布布分享&&&& &&&&
版权所有 京ICP备号-2
迷上了代码!

我要回帖

更多关于 选择最后一个元素 的文章

 

随机推荐