轶哥

妄图改变世界的全栈程序员。

关于JavaScript作用域与函数提升的一道思考题

在某个JavaScript前端群里面,网友深圳-resolve发的一道关于JavaScript作用域与函数提升的思考题引发了众位大佬的讨论。

题目

console.log(a)
if (true) {
    a = 2
    function a () {}
    a = 3
    console.log('内部', a)
}
console.log('外部', a)

执行结果:

image.png

打印a在所有位置的值:

image.png

Apple M1 编译原生Electron应用程序

Apple Silicon M1芯片可谓是性能爆炸,开发体验极佳,生态中适配速度也算得上势如破竹。借助Rosetta 2平稳过渡ARM64,实在是高明。在MacOS 11+系统中通过 Apple M1 编译原生M1 Electron应用程序也算得上轻松容易。

理论兼容M1芯片的Electron版本是11.2.3,实测兼容较好的版本是13.0.0-beta.5+

electron-builder需升级至20.10+,建议版本22.10.5+

本地Node.js版本请安装v15.5.0+

MacOS建议升级到11.2.3+

通过electron-builder编译Electron ARM64应用程序,需调整package.json配置文件。

Electron 12+ 出现 require is not defined 报错解决

在 Electron 12 及更高版本,设置了nodeIntegration: truenodeIntegrationInWorker: truenodeIntegrationInSubframes: true,渲染进程仍然可能出现require is not defined的报错。

这个报错还跟随有module is not definedexports is not defined

同样的报错在Electron 5+曾出现过,原因是发布v5.0.0的时候,官方将nodeIntegration默认值设置为了false(与此同时还将webviewTag设置为了false)。

近期,Electron 12.0.0 发布。修复了诸多异常。同时也将contextIsolation的默认值更改为true(详见:https://github.com/electron/electron/pull/27949)。

ubuntu 20.04 安装 pip2

在ubuntu 20.04 LTS版本中,可以通过sudo apt install python安装python2,但是无法通过sudo apt install python-pip安装pip2,提示E: Unable to locate package python-pip

无法找到python-pip安装包的原因是,Python 2.7的支持周期已于2020年1月1日结束。因为不再维护Python 2.7,pip 21.0已于2021年1月停止对Python 2.7的支持。

如果通过pypa.io的默认get-pip.py脚本进行安装,也将遇到This script does not work on Python 2.7 The minimum supported Python version is 3.6.提示。

【视频教程】Electron自动编译及自动更新、分发

为了实现Electron的自动更新,曾撰文《Electron 应用分发系统(Electron自动更新)》,不少小伙伴反应说不知道正确的操作姿势。仔细想来,这个部署确实不简单,因此特意录制此视频。

视频从头开始讲解了如何搭建一个Electron官方示例,配置并实现push到git仓库后服务器端自动编译、自动上传编译后的文件到七牛对象存储、客户端捕获更新信息并且后台静默更新的配置全过程。

需要特别留意的是,每次发布新版本之前都需要修改package.json里面的version版本号,否则自动更新分发会失效。

Node.js在VM环境使用ECMAScript modules

vm模块允许在V8虚拟机上下文中编译和运行代码。但是不是安全机制,如果有沙箱(sandbox)需求,可以考虑https://github.com/patriksimek/vm2

在VM环境中使用ECMAScript modules,即在VM环境中可以用import代替require引入某个模块,避免Cannot use import statement outside a module错误,也可以用export代替module.exports

我的使用场景:

通过Node.js在VM环境使用ECMAScript modules之目的,是为了构建一个虚拟环境(可控的上下文内容)动态执行一些代码,方便在复杂系统中构建小型脚本动态的快速验证一些想法。

https://github.com/yi-ge/api-proxy这个小项目中也有用到vm模块。

JavaScript练习题

学习JavaScript绝佳的方法是阅读代码。阅读代码需要熟悉JavaScript的基本语法,包括作用域、类型及类型转换、原型链、函数、异步、闭包等内容。In-JavaScript-we-trust给我们提供了非常好的练习素材。

赶紧自测一下JavaScript掌握得怎么样!

H5在线练习地址https://js.wyr.me

仅支持手机访问(毕竟做完68道题是需要耐心的,这是为了避免打开调试界面偷懒而设计)。

适用于嵌入式设备的高性能PDF在线预览方案

desktop.jpeg

对于内存较小的嵌入式设备或者移动设备(例如带屏智能音响,安卓、IOS平台的设备),在线预览PDF功能经常会导致内存溢出、应用程序闪退。

对于非常大的PDF文档,一次性下载整个文档将消耗大量的时间,即使开启分段下载,PDF文档正常下载完成并加载,超大的内存占用也会导致设备运行卡顿。

  上一页下一页