2014-06-06 55 views
0

我在下面的代碼中做了什麼錯誤?如何聲明和訪問全局變量

//File1.js 
var arr = []; 
function insertName { 
    var name = "josh"; 
    arr.push(name); 
    return name; 
}; 
function validName(key) { 
var index = arr.indexOf(key); 
    if (index == -1) { 
     return false; 
    } else { 
     return true; 
    } 
} 

var result = insertname(); 
exports.arr = arr; 
exports.validName = validName; 


//File2.js 
var file1 = require("./File1.js"); 
var name = "josh"; 
var verify = file1.validName(name); 
if(verify) { 
cosnole.log("Valid name"); 
}else { 
console.log("Error"); 
} 

node File1.js 
node File2.js 

時,即時通訊執行File2.js,林剛開未定義ARR []。有人可以幫我做什麼我在下面的代碼中做什麼

+0

在瀏覽器中,頂級範圍是全局範圍。這意味着在瀏覽器中,如果你在全局範圍內,var的東西將定義一個全局變量。在Node中,這是不同的。頂級範圍不是全球範圍; var模塊內的某些東西對本模塊來說是本地的。 - http://nodejs.org/api/globals.html – elclanrs

+0

'validName'不會神奇地進入'file1'作爲屬性;你必須導出它。 –

+0

這是所有的代碼還是有更多的未張貼?我將你的代碼複製到文件中(修復了幾個語法錯誤),然後運行它到nodejs命令提示符並運行它的文件。 – Ballbin

回答

1

Node.js模塊保留你在頂層聲明的變量,直到模塊被垃圾收集或手動刪除它們。如果你看看你的File1.js,你正在導出數組對象,沒有別的。所以,當你說

var file1 = require("./File1.js"); 

file1僅僅是它有一個arr屬性的JavaScript對象的引用。您可以通過打印file1進行檢查。您在File1中創建的功能從不導出。所以,你可以這樣*

exports = module.exports = { 
    validName: validName, 
    insertName: insertName 
} 

修復它現在要導出的功能,他們仍然可以訪問arr變量。從File2,你可以調用insertName這樣

file1.insertName(); 
if (file1.validName("josh")) { 
    console.log("Valid name"); 
} else { 
    console.log("Error"); 
} 

*要了解更多關於exportsmodule.exports,您可以檢查my blog post這個

0

您可以簡單地使用全球性的。(名)=(值)

實施例:

main.js

global.foo = 1; 
require('./mod.js').show(); 

mod.js

module.exports = { 
    show : function(){ 
     console.log(global.foo); // which prints "1" 
    } 
} 
1

你的代碼中包含的錯誤更改代碼像下面

File1.js

var arr = []; 

    function insertName() { 
     var name = "josh"; 
     arr.push(name); 
     return name; 
    }; 

    function validName(key) { 
     var index = arr.indexOf(key); 
     if (index == -1) { 
     return false; 
    } else { 
     return true; 
    } 
} 

var result = insertName(); 
exports.validName = validName; 

File2.js

var file1 = require("./File1.js"); 
    var name = "josh"; 
    var verify = file1.validName(name); 

if(verify) { 
    console.log("Valid name"); 
} else { 
     console.log("Error"); 
}