Javascript 使用document.getElementById作为一级函数

Javascript 使用document.getElementById作为一级函数,javascript,dom,functional-programming,Javascript,Dom,Functional Programming,作为一种函数式编程语言,JavaScript允许如下语句 var obj = { key: function () {return true;} }; var fn = obj.key; 这很简单,但为什么不起作用呢 $ = document.getElementById; 赋值本身不会引发任何错误,但尝试使用$函数会引发Chrome中的未捕获类型错误:非法调用。您必须将其声明为函数,并指定需要的参数: var $ = function(id){ return document.ge

作为一种函数式编程语言,JavaScript允许如下语句

var obj = {
    key: function () {return true;}
};
var fn = obj.key;
这很简单,但为什么不起作用呢

$ = document.getElementById;

赋值本身不会引发任何错误,但尝试使用
$
函数会引发Chrome中的
未捕获类型错误:非法调用。

您必须将其声明为
函数
,并指定需要的参数:

var $ = function(id){
return document.getElementById(id);
};

getElementById
是一种需要将上下文(
this
)设置为
document
才能正常工作的方法

一种方法是使用

fn = document.getElementById;

fn.call(document, 'some-id');
或者您可以使用ES5功能
bind
(这将修复上下文),如下所示:

fn = document.getElementById.bind(document);

fn('some-id');
或者您也可以自己完成
bind
最终要做的事情:

fn = function (id) {
    return document.getElementById(id);
};

fn('some-id');

JavaScript在将方法作为常规函数处理和动态地为方法提供调用上下文方面有很大的不同。您甚至可以通过使用函数本身的
call
apply
方法来覆盖
this

函数本身就是一个具有方法的对象,这些方法继承自function.prototype)。

我不想寻找解决方案,我问的是禁止将getElementById函数赋值给变量的语言规范