为什么当我将 js 函数分配给局部变量时会失败?

2024-04-15

在 clojurescript 1.9.89 和 Chrome 50.0.2661.102 中,我可以创建如下日志语句:

(js/console.log "works")

但我无法创建这样的一个:

(def brokenlog js/console.log)
(brokenlog "but not here")

--> #object[TypeError TypeError: Illegal invocation]

当我尝试通过打印我自己的值来比较这些方法时brokenlog功能,它看起来就像“真正的”——也就是说,两者brokenlog and js/console.log对我的评价是:

#object[log "function log() { [native code] }"]

同样,我看到这种行为:

cljs.user=> (js/document.querySelector "body")
#object[HTMLBodyElement [object HTMLBodyElement]]
cljs.user=> (def l js/document.querySelector)
#'cljs.user/l
cljs.user=> (l "body")
#object[TypeError TypeError: Illegal invocation]
nil

升级到 Chrome 52 修复了console.log行为,但不是document.querySelector行为。

所以我有两个问题:

1.我缺少什么

2. 我应该在哪里阅读解释它的官方文档?

Thanks!


您使用的是哪个浏览器和 clojurescript 版本? 如果显示以下代码,则应该可以在您的浏览器上运行nil放入盒子中。

.as-console-wrapper .as-console {
  display: none;
}
<pre><code class="language-klipse">
(js/console.log "Work!")
(def brokenlog js/console.log)
(brokenlog "Work again!")
; two line should be seen in your browser log
</code></pre>
<script>
    window.klipse_settings = {
        selector: '.language-klipse', // css selector for the html elements you want to klipsify
    };
</script>
<script src="http://app.klipse.tech/plugin/js/klipse_plugin.js?"></script>
<link href="http://app.klipse.tech/css/codemirror.css" rel="stylesheet"/>

EDIT

这是 clojure 脚本

(ns hello-world.core)
(def mylog js/console.log)
(mylog "Hello")

编译为 JavaScript

hello_world.core.mylog = console.log;
hello_world.core.mylog.call(null,"Hello");

console.log.call(null, ....)触发 chrome bug,console.log 期待this is the console目的。应该按照问题日志中提到的方式修复它https://bugs.chromium.org/p/chromium/issues/detail?id=167911 https://bugs.chromium.org/p/chromium/issues/detail?id=167911.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么当我将 js 函数分配给局部变量时会失败? 的相关文章

随机推荐