1)在其他一些语言中将函数定义为参数化语句块,并且在语法层面上javascript函数也看起来像这样,直到它说它可以拥有它自己的属性和方法。它如何在语法上表示为键/价值对?功能代码在哪里生效?
var x = function(a,b){alert('Hi');};
// x = { _code: "alert('Hi'), _arguments: {a:.., b:..,}}
这里的代码和参数是我想象中的内部属性
2)如果数组是键/值对,我认为数组索引只是对象键吗?
var a = ["elem1", "elem2"];
// a = {0: "elem1", 1: "elem2"}
答案 0 :(得分:0)
扩展我的评论,JavaScript中的一切是一个对象。
var arr = [
function () {
console.log("Well... Look at that.");
}
];
var obj = arr[0];
obj();
var newObj = Object.assign({}, arr);
console.log(newObj);
newObj[0]();
答案 1 :(得分:0)
如何在语法上表示为键/值对?
它不能。
函数的可执行代码不是根据对象的属性表示的。
功能代码在哪里?
这是JavaScript引擎的实现细节,而不是以标准方式暴露给JavaScript代码的东西。
如果array是键/值对,我认为数组索引只是对象键吗?
他们 只是属性。见the specification:
Array对象对某类属性名称进行特殊处理。当且仅当ToString(ToUint32(P))等于P且ToUint32(P)不等于2 32 时,属性名P(以String值的形式)是数组索引。 -1。属性名称为数组索引的属性也称为元素。每个Array对象都有一个length属性,其值始终是小于2 32 的非负整数。 length属性的值在数值上大于名称为数组索引的每个属性的名称;
......等等。