当前位置: 代码迷 >> JavaScript >> javascript学习2――javascript常见有关问题
  详细解决方案

javascript学习2――javascript常见有关问题

热度:76   发布时间:2012-11-22 00:16:41.0
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.onclick=function(){
				alert("author"+i);
			}
		}
	}
	window.onload=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.onclick=function(){
				alert("author"+i);
			}	
	}
	window.onload=init;
</script>


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

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

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

 

     

 

      

 

 

2楼beijiguangyong前天 16:45
1楼piaohong20124天前 16:00
小哥 本人菜鸟 n n具体解释下 n var foo1=example; 将函数引用赋给一个值foo1n好不?n还有 var foo1=example; 与 n function a(){nexample();n} 区别是啥啊
Re: llhhyy19894天前 20:05
回复piaohong2012n var foo1=example;函数引用传递给foo1,意思就是foo1就是代表了example,可以用foo1来代替example操作。有点像代理模式,example像个老大,他想做的事情直接由他的助理foo1来操作就可以了。
  相关解决方案