首页 > 其他分享 >浅谈(0,eval)('window')

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

时间:2023-05-06 09:34:18浏览次数:43  
标签:function ... 调用 浅谈 window proxy eval

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

最近研究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')('...')
  • 为什么
    • , 运算符,会去最后一个运算数,然后取值
    • =,?: 也是如此
    • 总结来说这些运算符都有一个取值得操作
    • 然而(,)这两个操作符没有取值这个意味。

标签:function,...,调用,浅谈,window,proxy,eval
From: https://www.cnblogs.com/kongshu-612/p/17375980.html

相关文章

  • 浅谈C#中动态类型与值类型装拆箱问题
    C#中的值类型封箱、开箱与动态类型的关系封箱和开箱是C#中两个重要的概念,它们涉及到值类型和引用类型在编译七和运行时的处理方式。动态类型是C#4.0引入的一个新特性,它允许在编译时不指定类型,而在运行时动态绑定类型。本文将简要介绍封箱、开箱和动态类型的概念,以及装拆箱与动态......
  • 浅谈一下对于 js 中的 this 的理解
    浅谈一下对于js中的this的理解对于this值的定义:简单来说this是一个对象,这个对象具体的值是什么,取决于运行时的环境,即代码执行时的环境。MDN:当前执行上下文(global、function或eval)的一个属性,在非严格模式下,总是指向一个对象,在严格模式下可以是任意值。......
  • windows api编程中 常用变量名pszText 的 psz 代表什么意思
    来自ChatGPT的回答:在WindowsAPI编程中,pszText是一个常见的变量名,通常用于表示一个指向包含文本字符串的缓冲区的指针。其中,psz是一种常见的命名前缀,它代表“指向以零结尾的字符串指针(PointertoZero-terminatedString)”。这是因为在WindowsAPI中,许多函数和结构体成员都需要......
  • [浅谈] 同余最短路
    \(\color{red}\text{总述}\)所谓同余最短路,就是把余数相同的情况归为一类,然后找到形成这种情况的最短路径。\(\color{purple}\text{P3403跳楼机}\)我们假设只能跳\(x\)步。那么可以达到的楼层是\(x,2x,3x,4x\),他们的共同点是\(\%x=0\)。那么现在再加个可以跳\(y\)步(......
  • windowds下备份MySQL(mysqldump)
     mytest.bat文件内容如下 @echooffsetbackup_date=%date:~0,4%%date:~5,2%%date:~8,2%setdb_name=db_test01db_test02db_test03for%%iin(%db_name%)do(mysqldump-hlocalhost-uroot-pmysql-P13306%%i--default-character-set=utf8--set-gtid-purged=OFF......
  • 将Windows系统设置NTP服务器-NetTime篇
    之前写过一个将Windows系统设置NTP服务器的随笔,是通过修改Windows的注册表来实现NTP服务器,现在有个更简单的方式,安装一个小插件即可将Windows设置为NTP服务器。插件NetTime下载链接:http://www.timesynctool.com/NetTime是适用于Windows95/98/Me/NT/2000/XP/Vista/7/8/10和......
  • Windows漏洞更新地址
    Windows漏洞更新地址https://www.catalog.update.microsoft.com/ 例如修复编号:KB5025285  ......
  • Windows 切换为 Administrator 用户
    1.以管理员身份打开cmd2.输入netuseradministrator/active:yes(意思是添加Administrator超级管理员)3.打开win+r,输入controluserpasswords2(可查看是否添加成功)......
  • windows php执行终端命令
    $cmd='"H:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe"I:\weman\webman\start.phpI:\weman\webman\runtime\/windows\start_monitor.phpI:\weman\webman\runtime\/windows\start_task.phpI:\weman\webman\runtime\/win......
  • Windows设备防火墙放行指定EXE
    @echooffsetfile_path="C:\Path\To\Your\File.exe"setrule_name="MyRuleName"setprotocol=anyechoAdding%file_path%toWindowsFirewall...netshadvfirewallfirewalldeleterulename=%rule_name%>nulechoAddinginboundr......