浅谈(0,eval)('window')

这篇具有很好参考价值的文章主要介绍了浅谈(0,eval)('window')。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

浅谈(0,eval)('window') vs new Function()

最近研究qiankun 源码,在import-html-entry 包中看到这个,一脸懵,研究了一下,记录一下。参考了这篇博客

这个干啥用的

	// 通过这种方式获取全局 window,因为 script 也是在全局作用域下运行的,所以我们通过 window.proxy 绑定时也必须确保绑定到全局 window 上
	// 否则在嵌套场景下, window.proxy 设置的是内层应用的 window,而代码其实是在全局作用域运行的,会导致闭包里的 window.proxy 取的是最外层的微应用的 proxy
	const globalWindow = (0, eval)('window');
	globalWindow.proxy = proxy;

如代码注释所示,这个是确保获取全局作用域的window

如何做到的

  • eval 直接调用与间接调用。es5规范中指明,间接调用eval是在全局作用域中执行。
  • 哪些是直接调用,哪些是间接调用。简单来说,计算出eval 值,来调用得就是间接调用,如果是引用就是直接调用。看例子
    • 直接调用
eval('...')
(eval)('...')
(((eval)))('...')
(function() { return eval('...') })()
eval('eval("...")')
(function(eval) { return eval('...'); })(eval)
with({ eval: eval }) eval('...')
with(window) eval('...')
  • 间接调用
(1, eval)('...')
(eval, eval)('...')
(1 ? eval : 0)('...')
(__ = eval)('...')
var e = eval; e('...')
(function(e) { e('...') })(eval)
(function(e) { return e })(eval)('...')
(function() { arguments[0]('...') })(eval)
this.eval('...')
this['eval']('...')
[eval][0]('...')
eval.call(this, '...')
eval('eval')('...')
  • 为什么
    • , 运算符,会去最后一个运算数,然后取值
    • =,?: 也是如此
    • 总结来说这些运算符都有一个取值得操作
    • 然而(,)这两个操作符没有取值这个意味。

聊聊 new Function

  • 语法如下,其中所有的参数都是string.参考链接
new Function([arg1,arg2,arg3,...],functionbody)

给个例子

const printme=new Function('message','console.log(message)');
printme('hello world');// 'hello world'

说明几点文章来源地址https://www.toymoban.com/news/detail-434801.html

  • functionbody是在全局作用域中执行的
  • 它跟eval 有点类似,只是作用域不一样,eval 是可以访问本地作用域的(前提是直接调用).

到了这里,关于浅谈(0,eval)('window')的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浅谈Windows的各种“字符串”

    不知道你们的大学老师有没有说过 中文是用两个字节保存 ,直到我了解了字符编码,然后留下了这几行代码 结果很明显,不同的编码方式,中文所占字节也不一样 ,而这就要从 Windows 下的字符集说起。 说起Windows下的编程,可能大家的印象都是:微软从来都“特立独行”,

    2024年02月10日
    浏览(39)
  • common/main.js: TypeError: window.WeixinJSBridge.beforeinvoke is not a function 小程序工具项目运行报错

    小程序项目启动成功,但是项目空白 切报错 报错如图 解决办法:

    2024年02月11日
    浏览(47)
  • 浅谈Kernel32.dll(Windows平台下必有的动态库文件)

            今天听了前辈的黑客攻击的知识分享,里面比较基础的元素就是Kernel32.dll,我对它感兴趣好久了,今天搜集一些资料,有关Kernel32的。   目录 ​编辑 一、Kernel32介绍 二、Kernel32内存管理 三、引起Kernel32出错的主要元凶 四、解决方案 五、总结         Kernel32.dll是

    2024年02月04日
    浏览(42)
  • The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support

    ros2 foxy 运行单目orb slam3 编译正常,程序运行时报错如下 Loading ORB Vocabulary. This could take a while... Vocabulary loaded! Initialization of Atlas from scratch Creation of new map with id: 0 Creation of new map with last KF id: 0 Seq. Name: There are 1 cameras in the atlas Camera 0 is pinhole slam changed ============================ te

    2024年02月12日
    浏览(39)
  • python的opencv错误The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon

    1、出现问题: cv2.error: OpenCV(4.5.4-dev) D:aopencv-pythonopencv-pythonopencvmoduleshighguisrcwindow.cpp:1274: error: (-2:Unspecified e rror) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script i

    2024年03月11日
    浏览(42)
  • conda下安装好opencv相关库后运行却报错The function is not implemented. Rebuild the library with Windows, GTK+ 2.x

    先上本人解决方法: 在对应的conda环境下: 前因后果: 在新配置了一个环境后,为了图方便就在Anaconda Navigator里把opencv相关的勾选后安装了。其实也没什么问题,毕竟查询版本啥的都对。我们conda list后也可以找到相关的库。但是在运行一些基本的opencv函数就会报错,比如

    2024年02月04日
    浏览(50)
  • 【微前端】qiankun

    专栏: 【微前端】什么是微前端 【微前端】qiankun 【微前端】qiankun + vite + vue3 qiankun 是一种前端微服务架构,旨在解决大型复杂应用的拆分和管理问题。 qiankun 的设计思路是基于“微服务”架构和“大前端”思想的,通过拆分前端应用、动态加载、状态共享、兼容性和稳定性

    2024年02月10日
    浏览(44)
  • 微前端——qiankun(乾坤)实例

    微前端就是将不同的功能按照不同的未读拆分成多个子应用,通过主应用来加载这些子应用,微前端的核心在于拆,拆完后再合 不同团队间开发一个应用技术栈不同 希望每个团队都可以独立开发,独立部署 项目中还需要老的应用代码 我们可以将一个应用划分成若干哥子应用

    2024年02月06日
    浏览(58)
  • 微前端框架qiankun剖析

    要了解qiankun的实现机制,那我们不得不从其底层依赖的single-spa说起。随着微前端的发展,我们看到在这个领域之中出现了各式各样的工具包和框架来帮助我们方便快捷的实现自己的微前端应用。在发展早期,single-spa可以说是独树一帜,为我们提供了一种简便的微前端路由工

    2024年02月05日
    浏览(47)
  • 微前端----qiankun

    1.qiankun是什么?它解决了哪些问题? qiankun 是一个基于 single-spa 的微前端实现库,换句话说就是对single-spa进行了封装得到qiankun。 qiankun就是将一个大应用拆分成好多小项目,qiankun解决了我们协同开发的一些问题,其次更方便于我们进行更新代码 。 2.qiankun的实现原理及过程

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包