javascript学习2——javascript常见问题

         1、JS中方法和变量都是区分大小写的

         2、单引号、双引号在JS中没有特殊的区别,都可以用来创建字符串。但作为一般性规则,大多数开发人员喜欢用单引号而不是双引号,但是XHTML规范要求所有属性值都必须使用双引号括起来。这样在JS中使用单引号,而对XHTML使用双引号会使混合两者代码更方便也更清晰。

              单引号可以包含双引号,同理,双引号也可以包含单引号。

         3、括号

              首先需要说明的是:JS中括号包含两种语义,可以是分隔符也可以是表达式。

              a、分隔符大家非常熟悉(1+3)*3等于12

              b、(function(){})();         function之前的一对括号作为分隔符,后面的括号表示立即执行这个方法。

        4、函数调用和引用

              因为括号代表执行,所以:

              var foo=example();                foo表示函数的返回值

              var foo1=example;                将函数引用赋给一个值foo1

        5、重载

              JS不支持重载,因此这里所说有重载其实更类似于替换

              JS不区别参数个数

        6、作用域、闭包

             作用域指对某一属性或方法具有访问权限的代码空间。如:

             function myFunction(){

                    var temp="abc";

             }

             上面的temp在函数外面无法访问。

             闭包是与作用域相关的一个概念,它指的是内部函数即便在外部函数执行完成并终止后仍然可以其外部函数的属性。

 

            下面我们就作用域和闭包来举个例子:

             我们建立如下html页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language="javascript" type="text/javascript">
	function init(){
		for(var i=1;i<=3;i++){
			author=document.getElementById("author"+i);
			author.οnclick=function(){
				alert("author"+i);
			}
		}
	}
	window.οnlοad=init;
</script>
</head>

<body>
<a id="author1" href="#">abc</a><br />
<a id="author2" href="#">abc</a><br />
<a id="author3" href="#">abc</a><br />
</body>
</html>


 运行结果:

   

       可以看到,这并不是我们想要的。

 

       进行修改后,关键代码如下:

<script language="javascript" type="text/javascript">
	function init(){
		for(var i=1;i<=3;i++){
			author=document.getElementById("author"+i);
			registerListener(author,i);
		}
	}
	
	function registerListener(author,i){
		author.οnclick=function(){
				alert("author"+i);
			}	
	}
	window.οnlοad=init;
</script>


        这样,我们就得到了我们想要的结果。

     这是因为init每次调用都产生function的一个实例,每个实例里都维护了一个新的i

     而对于匿名函数的上一级已经有这个i,而且已经和init里的i不一样了。

 

     

 

      

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值