作者sk1765 (鼎玉铉)
看板Ajax
标题Re: [问题] js Function位置问题
时间Mon Jul 19 00:48:51 2010
※ 引述《iam87king (沉默伤心)》之铭言:
: 最近用了一个检测js码的service,发现被提了好多warning XD
: 几个印象比较深的提出来跟大家分享一下
: 1.parseInt
: 平常习惯就是直接 var num = parseInt("123");
: 後来才发现原来parseInt第二个参数不填也会被报warning
: 所以严谨一点的写法应该是这样 var num = parseInt("123", 10); 10就是10进位
: 2.逗号问题
: 我也不知道为什麽这样有问题
: var context = { "a" : "Hello", "b" : "Reject", "c" : "Good Night"
: ,"d" : "Nothing", "e" : "Ajax"};
: 改成这样就没有出现warning了
: var context = { "a" : "Hello", "b" : "Reject", "c" : "Good Night",
: "d" : "Nothing", "e" : "Ajax"};
: 虽然都可以run,我也不知道到底差在哪
: 3.Function 位置
: 假设有二个Function
: Function initPage(){
: sayHello();
: }
: Function sayHello(){
: alert("Hello");
: }
: 我知道这样也是可以执行,但它还是说你的sayHello在被呼叫时尚未定义
: 所以想请问一下Function在被呼叫时尚未定义会不会造成什麽潜在的影响?
让我来回答第三段问题
在javasscript中 所有的变数和 函数 都是隶属於window全域物件下
所以 initPage() 就是window.initPage()
sayHello() 就是window.sayHello()
所以 如果你前面加了window 或 self 无论你写在什麽位子都可以call不会出错
因为javascript允许 一个未定义的属性或方法的存在值为undefine
但是当你执行到sayHello时 他的值已经是有定义的function了
如果你直接向上面那样叫
当你在initPage里call sayHello()时 实际上你执行了两个动作
第一当时的sayHello是 undefine
第二()代表执行
所以 你等於是做了 undefine() 这样一个动作
当然拉就出错了
所以 在initPage里 呼叫时 改成 window.sayHello() 应该就顺利通过啦
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.59.14.24
1F:→ TonyQ:嘿嘿 你的第二句话有可以挑语病的地方 XD 07/19 08:16