js解析机制与闭包分析

js解析机制与闭包分析,第1张

随着互联网的不断发展,程序员在学习JavaScript编程开发上也有了更多的了解,今天我们就简单分举正析一下关于JavaScript编程解析机制以及闭包的一些常见问题。

js解析机制:

js代码解析之前会创建一个如下的词法环境对象(仓库):LexicalEnvironment{}

在扫描js代码时会把:

1、用声明的方式创建的函数的名字

2、用var定义的变量的名字存到这个词法环境中

3、同名的时候:函数声明会覆盖变量,下面的函数声明会覆盖上面的同名函数

4、函数的值为:对函数的一个引用变量的值为undefined

5、如果用函数表达式的方式创建一个函数:

varfn=function(){}这样词法环境中存的是一个变量名fn,并赋值为undefined

在调用函数的时候如果在函数上面调用就会让闷出现和变量一样的情况报错undefined

这也是以两种不同方式创建函数的区别

闭包:

定义:(有多种定义)

1、(比较通俗的定义):函数嵌套函数,内部函数可以引用外部函数的参数和变量,这些参数和变量不会被垃圾回收机制所回收

2、在计算机科学中,闭包是词法闭包的简称,是引用了自由变量的函数,这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外(意思就是不会被销毁)。

3、闭包是由函数和其相关的引用环境组合而成的实体。(潜台词就是这个函数将和引用环境同时存在,必须有引用)

综合来说,不管怎么定义都是在围绕着两个本质:函数在引用变量,这个变量将不会被销毁。

闭包的一个作用就是:我们能够通过闭正滑悔包的方法来在外部访问到一个内部函数的变量

很多人在解释闭包的时候都会把子函数return出去以后在外部调用,其实无论在哪里调用,闭包都已经形成了,只要是函数嵌套函数,并且子函数引用了父函数的变量,(不论子函数有没有被调用,电脑培训认为这个用一种方法证明:在子函数内部打断点,在f12中观察闭包里的内容,已经出现了引用函数,这时候调用还没有被执行)这个时候闭包已经形成了。

分类: 电脑/网络 >>兆碧 程序设计 >>其他编程语言

解析:

js文件常见的有两种用法。

1.在网页里使用:一般不能直接打开,只有配合网页使用,如果是想破解某网站的在线电毕简影等,仅从js文件入手可手猜裤能性不大,建议使用专门的抓取工具,如wpe,抓取网络封包,再对封包分析,js可以使用记事本编辑。

2.在单机使用,一般可以用来做为一个可执行程序直接双击就可以运行,当然前提是计算机没有安装网页设计软件。

以js为扩展名的文件是用javascript脚本语言编写的.

问题:使用 koa-bodyparser 可以解析post提交的问题,但是发现获取不到formdata上传的文件。

后经查资料,改用 koa-body 解决:

constkoaBody = require('koa-body')app.use(koaBody({ multipart:true, formidable: { maxFileSize:200*1024*1024//设置上传文件大小最大限制,默认2M} }))

然后就可以在 ctx.request.files 里面获取到上传的 文件信息了。ctx.request.files 为一个对象,里面包含一个 file 字段(为你前端上传定义的值),值为文件信息,主要是文件name和path,path为临时存储路径。

二、解析xlsx文件信息

主要使用模块 node-xlsx :npm i xlsx --save

1、加载模块

使用模块:fs--主要用于写入文件;node-xlsx主要用于转换xlsx数据和读取xlsx的文件数据;

constfs = require('fs')constxlsx = require('node-xlsx')//读写xlsx的插件

2、读取功能

读取功能相对简单,直接使用模块的 prase(路径) 方法就能读取

let list = xlsx.parse("./doc/hello.xlsx")

返回结果,name:表名,data:二维数组。(由于Excel以表格的形式表示,因此表格的数据都是通过二维数组进行接收。)

需要注意数芦改的是:data里的第一行数组为表头的信息

[ { name:'firstSheet', data: [ [Array], [Array] ] }, { name:'secondSheet'哗隐, data: [ [Array], [Array] ] } ]

3、写入功能薯判

写入功能,对应的写入数据与上面读取功能的返回格式需要一致,以数组的形式,name:表名,data:二维数组(Excel每行每列的数据)

如下面代码,生成一个Excel文件,分别两张表,表名分别是firstSheet,secondSheet

let xlsxObj =[ { name:'firstSheet', data: [ [1,2,3], [4,5,6] ], }, { name:'secondSheet', data: [ [7,8,9], [10,1,12] ], } ]

生成Excel文件:

fs.writeFileSync(路径,Buffer数据)

xlsx.build(xlsxObj) 会将数组转换为Buffer数据

执行下面代码就会生成对应的Excel文件

fs.writeFileSync('./doc/hello.xlsx', xlsx.build(xlsxObj),"binary")


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12274815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存