瞎扯淡 大家是怎么管理你们的 js 的?

QueXuQ · 2012年10月25日 · 最后由 wity_lv 回复于 2012年10月25日 · 3053 次阅读

其实像 css 或者 js 文件大小还是没关系的。 关键一个问题,应该不让 js 的脚步在所有页面都运行一遍吧。 就像找一个 class 名字的,每个页面点击都找一遍觉得不太好。

所有我把 js 都封装好,然后每个独立页面上在调用。可是发现在页面上调用不了封装好的函数,似乎浏览器会先执行 html 下的的 javascript,然后在执行.js 文件的。 <p>大家发表下意见,是怎么管理 js 文件的?</p>

#1 楼 @hooopo 意思就是, 我在.js 文件中写类或者函数

function xx(){
}

而只在 html 下的里调用 function,如 slim: <div class="highlight"><pre class="highlight plaintext"><code>javascript: jQuery(function() { xx(); } </code></pre></div> <p>这样,会出现 xx() 方法找不到。 但是如果把 javascript:下的内容放到.js 文件里,就会在所有页面执行一次 xx(),这样觉得不太好,如果内容太多,太消耗内存了。</p>

#2 楼 @QueXuQ 这个问题很复杂。解决方案也很多。最简单的办法就是在浏览器 onload 事件完成后再触发你的函数。

<script>
 function xx(){}
 document.onload = xx;
</script>

#2 楼 @QueXuQ xx() 找不到只说明你的 js 并没有加载进来,或是不在全局作用域。

想办法判断出页面 比如在topic#show页面里写上

<script type="text/javascript" language="javascript" charset="utf-8">
//<![CDATA[
  window.page_name = "topic_show";
//]]>
</script>

在 JS 文件里的$.ready 里根据 window.page_name 判断是什么页面,再运行你需要运行的 JS

在页面里单独调用 JS 方法时,记得用$.ready JS 方法调用最好在 include script 标签后面

匿名 #6 2012年10月25日

(function() {})(); 立即执行..

不会写 Js 的就上 Js 框架,有规范可遵循

#3 楼 @hooopo 谢谢,你说的这个方法是可行的。 #4 楼 @ashchan 恩。对。 #5 楼 @cxh116 第一次见过这个判断方法,奇怪的是怎么进行判断的,title 来判断的吗?还是文件名? #6 楼 @wity_lv 我想问一下 (function() {})() 在这个里面的函数,需要通过什么来调用?如:

(function() {
  var total_amount;
  total_amount = function() {
    var total;
    total = 0;
    alert(total)
  };
}).call(this);
total_amount()  //似乎无法调用

#7 楼 @xds2000 恩。正在用 jQuery

#8 楼 @QueXuQ total_amount 在闭包里,当然是无法调用的。你在全局调用 total_amount(),其实是在调 Window.total_amount,所以你除非 1,在里面设上 Window.total_amount = total_amount,2,将方法暴露出来。给你一个通用的写法:

var MyClass = (function() {
    return {
        total_amount: function() {
           var total = 0;
           alert(total);
        }
    }
})();

然后在页面上:MyClass.total_amount();

#9 楼 @ashchan Thanks.在用 coffeescript,刚刚才发现原来使用的时候,会自己加在闭包里,之前一直不知道。感激。^_^

匿名 #11 2012年10月25日

(function() { window.total_amount = function() { var total; total = 0; alert(total) }; }).call(this);

total_amount

@QueXuQ 我说的 JS 框架是指 Backbone.js 这样的。JQuery 应该是 Library Framework,但不是 development framework.完全不一样的东西。换句话,就是你会写 JQuery 也并不代表你会写 JS。

匿名 #13 2012年10月25日

#8 楼 @QueXuQ (function() { window.total_amount = function() { var total; total = 0; alert(total) }; }).call(this);

total_amount();

var 申明的变量,作用域只属于当前 function

需要 登录 后方可回复, 如果你还没有账号请 注册新账号