js基础知识

js基础知识

1、闭包

(function (i)
{
    console.log(i)
})(1)

参考: js 【详解】闭包

2、内部函数外部调用

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();

3、prototype

参考资料:理解JS的prototype

4、读取文本数据

4.1 异步

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是文件的内容。

如果没有指定编码,则返回原始缓冲区。

4.2 同步

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)
}) 

5、javascript之function的this

参考资料:javascript之function的this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静心问道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值