(function (i)
{
console.log(i)
})(1)
参考: js 【详解】闭包
var outer;
(function ()
{
function inner(){
console.log("inner method")
}
outer = inner
})()
console.log(outer())
思路: 在外面定义全局变量,将内部函数赋值给全局变量。
用途:很多加密函数可能会在函数内部,需要在外部调用
那应该怎么做才能在外部环境调用函数内部的函数呢?先在函数外部定义一个变量,用来接收函数内部的函数的函数名。如下:
//定义一个变量名
var last;
function numberone(){
var b=20;
function numbertwo(){
var c=30;
console.log(c);
}
last=numbertwo;
console.log(b);
}
//先调用外部函数
numberone();
//再调用内部函数
last();
参考资料:理解JS的prototype
从FS.READFILE
获取数据
var content;
fs.readFile('./Index.html', function read(err, data)
{
if (err) { throw err; }
content = data;
});
console.log(content);
日志undefined ,为什么?
为了详细说明@Raynos说了什么,你定义的函数是一个asynchronous callback。 它不会立即执行,而是在文件加载完成时执行。 当您调用readFile时,控制立即返回并执行下一行代码。 所以当你调用console.log时,你的callback还没有被调用,并且这个内容还没有被设置。 欢迎来asynchronous编程。
示例方法
var content; // First I want to read the file
const fs = require('fs')
fs.readFile('./Index.html','utf8', function read(err, data) {
if (err) {
throw err;
}
content = data; // Invoke the next step here however you like
console.log(content); // Put all of the code here (not the best solution)
})
function processFile() {
console.log(content);
}
processFile(); // Or put the next step in a function and invoke it });
或者更好的是,正如Raynos的例子所示,将你的调用包装在一个函数中,并传入你自己的callback函数。 (显然这是更好的做法)我认为把你的asynchronous调用包装在一个callback函数的习惯将节省您很多麻烦和杂乱的代码。
function doSomething(callback) { // any async callback invokes callback with response }
doSomething(function doSomethingAfter(err, result) { // process the async result });
实际上有一个同步function:
http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_encoding
asynchronous
fs.readFile(filename, [encoding], [callback])
asynchronous
读取文件的全部内容。 例:
fs.readFile('/etc/passwd', function (err, data) {
if (err) throw err;
console.log(data);
});
callback传递两个参数(err,data),其中data是文件的内容。
如果没有指定编码,则返回原始缓冲区。
fs.readFileSync(filename, [encoding])
fs.readFile的同步版本。 返回名为filename的文件的内容。
如果指定了编码,那么这个函数返回一个string。 否则它会返回一个缓冲区。
var text = fs.readFileSync('test.md', 'utf8')
console.log(text)
function readContent(callback) {
fs.readFile("./Index.html", function (err, content) {
if (err) return callback(err)
callback(null, content)
})
}
readContent(function (err, content) {
console.log(content)
})
参考资料:javascript之function的this