javascript变量范围和requirejs模块

时间:2014-01-02 21:43:38

标签: javascript requirejs scope

我有一个像这样开始的durandal(基本上是requirejs)模块:

define(['plugins/http', 'durandal/app', 'knockout', 'plugins/ajax', 'plugins/formatters', 'durandal/global'], 
function (http, app, ko, ajax, formatters, global) {


//formatters is defined here
        var ctor = function () {

//formatters is not defined here

我在调试器中放了一个断点,发现格式化程序是在函数外部定义的,但在函数内部却没有...

这是requirejs模块的独特之处吗?通常在函数外部声明的变量仍然可以在内部函数中访问,除非被覆盖。这似乎是某种范围问题,但我不明白我在这里缺少什么 - 在外部范围内的内部函数,那么问题是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

您的问题可能不是该变量本身不可用。添加像这样的行 console.log(formatters)函数

中的ctor

这将导致闭包包含formatters变量,从而使调试器可以看到它。闭包只包含变量(如果使用它们 - 至少就像我在Chrome和FF中看到的那样。

答案 1 :(得分:1)

之前我遇到过这个问题,我设法通过在函数之后定义一个varieble并为其赋予参数来解决它。例如:      Var fmtrs = formaters;