Ajax 板


LINE

※ 引述《senser (彷佛曾经一起死过)》之铭言: : 这某种层度像是种变数污染 : 感觉还没写过的东西 上面却叫得出来 : 或是不小心用到了同样名字 会产生难预料又难debug的问题 : 2. : Overwrite问题: : (function(){ : function sayHelloThenHi(){ : alert('hello'); : } : sayHelloThenHi(); : function sayHelloThenHi(){ : alert('hi'); : } : sayHelloThenHi(); : })(); : 这会有甚麽结果呢? 他会跟你讲两声hi : 直观上这是我们想要的吗? 我会说你根本就不应该有任何可能性写出这种code ... 你说你没包 (function(){}) 作scope protection 就算了, 有作你还搞出这种 code ,这是写 code 的人白目。XD 不过怕得是没作 scope protection , 其实 scope protection 才是个好习惯。 其实这件事情还不是主要的问题啦, 主要得问题还是在於没作 scope protection时, 他会等价成 window.sayHelloThenHi = function(){ } 这才是讨厌的 : (function(){ : var sayHelloThenHi=function(){ : alert('hello'); : } : sayHelloThenHi(); : sayHelloThenHi = function(){ : alert('hi'); : } : sayHelloThenHi(); : })(); : 此例中 他会先说hello在说hi : 感觉似乎是我们比较想要的结果 : 至於为什麽? 相信你已经知道了 : 结论: : 那到底要怎麽写function比较好呢 : 1. : 如果你JAVA或是C#等等classical的语言实在太强了 : 为什麽要为js这种诡异的prototypal语言改习惯?? : 那千万记住把function xxx(){}这种东西写在每个context的最前面 : 这就可以省掉大部分错误和麻烦 : (这也就是很多js的书说宣告变数要在最前面) 就我的认知,变数宣告在最前面主要是避免重复宣告, 因为 js 的 local variable 都是同一个 scope, 所以 function (){ if(true){ var k = "hi"; } alert(k); } 还是会印出 "hi" 来,所以每一个变数命名, 其实是有在 if/for/while 里面的都还是会互相污染, 只有 function 里面的不会。 所以都列在前面一眼就知道哪些有被用过,要取新的也比较方便; 但是缺点就是变数跟实际用到它的地方离有点远, 个人是喜欢根据功能需求尽可能拆子函式分开管理变数。 当然 i 这种回圈专用的变数除外啦 :P : 2. : 如果你想钻研js这诡异的语言 : 你的function应该大部分会出现在你global abatement的object下面 : 如 : var MySite = { : my_awesome_func : function(){ : //do something good : } : }; : MySite.my_awesome_func(); //invoke : 或是expression的写法 : var callback = function(){ : do some useful stuff : }; : 这常常用於callback的传递... : 总之你应该不会有机会写 : function bad(){ : //still do something : } : 这种东西 一般这种东西只会出现在所谓的 private helper function 完全没有打算让外人存取。 (放在自定义 global context 底下会有被存取到的危险) (function(){ function my_private(){ alert("hi"); } window.my_global_context= { do_somthing:function(){ my_private(); } } })(); 以这个例子来讲,其他人完全没有机会从外部改掉你的 my_private实做, 要就要他整套从 do_something 开始都自己 overwrite。 对一些讨厌自己的 code 被乱改或者控制欲比较强的家伙,这是常见的作法。 当然,private static helper 要有名称重复的状况,这也是有点扯。 以上的例子也可以写成 var my_private = function(){ } 纯粹是看个人的使用习惯就是了。 实务上除了这种 private helper 或 Constructor 有机会这样写以外, 其他的状况都还是匿名函式赋值的写法居多。 var xx = function(){ } 或 var my ={ xx:function(){ } } : 真是抱歉 讲太多废话了.. 一打就很难停下来.. : 因为国内有少数教材 常会有不是很正确的观念 : 让我以前刚学习时 走了不少冤枉路 : 以至於看到种观念有关的东西 我就特别想讲 : 加上js又是很特别的语言 常常有人用其他语言的逻辑来套 : 但事实上含意是不同的 : 希望有人有耐心可以看到这里 : 如果有错误 也希望可以指正:D 每个语言都有他们自己的语法特性,如果要用其他语言来套, 而且那些人对他们口中的「其他语言」也真的有够多了解的话。 其实他们很多观念还是蛮一致的。 -- I am a person, and I am always thinking . Thinking in love , Thinking in life , Thinking in why , Thinking in worth. I can't believe any of what , I am just thinking then thinking , but worst of all , most of mine is thinking not actioning... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 198.203.175.175 ※ 编辑: TonyQ 来自: 198.203.175.175 (09/22 23:33) ※ 编辑: TonyQ 来自: 198.203.175.175 (09/22 23:34)
1F:推 s25g5d4:TonyQ必推 话说....Tony好萌 (逃 09/23 21:04
2F:→ TonyQ:好萌是什麽梗啊 XD 09/24 00:27
3F:→ s25g5d4:有个画师叫Tony 他画的画还不错 然後#(&%@*!所以Tony好萌 09/24 13:38







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP