JavaScript开发中一些问题(二)

JavaScript开发中一些问题(二)

JavaScript中如果出现换行,将自动添加;号

<script language="JavaScript" type="text/javascript">
 var test = "xxxx
      yyy";
 alert( test );//出现错误
</script>

 
变量test字符串出现换行这个时候浏览器会自动在换行的xxxx后加;
这样变量test实际为 

var test = "xxxx;
      yyy";

所以出现错误

html,JavaScript是从上往下依次编译的
即如果加载时执行些JavaScript脚本,脚本中使用的对象必须是在它之前就已经出现的对象。而非在它以后出现的对象

<script language="JavaScript" type="text/javascript">
//在btn加载前使用
alert( document.getElementById( "btn" ).name );//提示缺少对象
</script>
<input type="button" name="btn" id= "btn" value="测试" />
<script language="JavaScript" type="text/javascript">
//在btn加载后使用
alert( document.getElementById( "btn" ).name );//正确,弹出结果btn
</script>

 
第一调用btn对象时相应的html控件btn并未解释到,所以出错
第二次调用时在btn解释后,这个时候调用能获取相应的对象

JavaScript是按块解释并执行
同一个块中的调用与声明无前后关系
但是不同的块中调用时,调用的块必须在声明的块后面

<script language="JavaScript" type="text/javascript">
   //在testF未声明前调用testF
   testF();//未出错,弹出 我在声明前调用!
   function testF(){
      alert( '我在声明前调用!' );
   }
   testO();//出错,缺少对象
</script>
<script language="JavaScript" type="text/javascript">
 function testO(){
   alert( '我在中间!' );
 }
</script>
<script language="JavaScript" type="text/javascript">
 testO();//我再中间
</script>

 
testF()在未声明前调用并为出错,因为JavaScript是按块解释并执行,即当解释完整个script块时才执行,所以弹出结果而不是出错。
testO()的声明和调用不在同一个script中,当调用的script块执行时,而testO()方法并为编译,所以出错
而最后的testO(),再解释执行它时testO()的声明所在的script块已完成编译所以没有出错

作用域二
JavaScript中只有函数有作用域,而对于if、for、while、switch等块结构是没有作用域的。
//与Java(c++)中的作用域不同,Java(c++)中以{}为作用域的分界点,
注:对于Java语言来说,有一条限制。在Java语言中,即使作用域不同,其定义的变量名字也不能够相同。

str = "我是全局的!";
function testequa(  ){
 var str = "您好";
 do{
   var str = "我在while中!";
 }while( false );
 alert( str );//输出结果为我在while中!
 alert( testStr2(  ) );//我是全局的!
}
function testStr2(  ){
 return str;
}

 
str是个全局变量,因函数有作用域,所以函数testequa再次声明str变量会让全局的str对于函数testequa是不可见(不是覆盖)。
同时因为if、for、while、switch等块结构是没有作用域,do while 中str 会覆盖函数testequa的str变量的值。所以alert( str )输出结果

为"我在while中!"而对于全局的str的值并没有改变所以alert( testStr2(  ) )输出的结果为"我是全局的!"

JavaScript路径
文件外部引入javascript时,javascript的当前路径是引入文件的当前路径,而不是javascript文件的所在路径。

判断某个控件是否存在

//by id没有获取到相应的控件对象是为null
if( document.getElementById( "xxxx" ) == null ){
 //控件不存在时的操作
}

 

动态的调用函数
1:使用eval方法 eval是将字符串作为JavaScript代码执行

function testEvel( ){
    alert( "动态执行!" );
}
eval( "testEvel()" );//弹出结果"动态执行!"
eval( new String( "testEvel()" ) );//没有任何返回

 
注:该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。
推荐不使用该方法 因为使用eval相当于在运行时再次调用解释引擎对内容进行运行,需要消耗大量时间。

2:使用Function创建,这是用在于控件的事件中,如按钮

<input type="button" name="btn" id= "btn" value="测试" />
<script language="JavaScript" type="text/javascript">
function testEvel( ){
 alert( "动态执行!" );
}
//对象事件绑定函数
document.getElementById( "btn" ).οnclick=new Function(" testEvel( )");

 
</script>
3:使用形参的方式传递,详细的实例见JavaScript开发中一些问题(一)

下班,下次再写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值