function foo(){
var test = 1
}
foo.myName = 1
foo.uName = 2
console.log(foo.myName)
在v8内部, 会为函数 添加隐藏的name, 和code 属性:
- name 属性的值就是函数名称, 匿名函数则是 anonymous
- code 属性值表示函数代码,以字符串的形式存储在内存中
当执行函数的时候, v8就去查询code属性值, 然后解释执行这段代码.
闭包
javascript里的函数, 可以像变量一样, 使用起来没有其他限制, 有很高的灵活性.
所以在函数调用的时候, 需要去处理函数引用的外部变量
v8因此维护了一个作用域链,
在函数中使用的变量, 会沿着作用域链去查找, 没有找到则报错.
function foo(){
var number = 1
function bar(){
number++
console.log(number)
}
return bar
}
var mybar = foo()
mybar()
这样因为外部变量被函数引用, 所以外部变量不能被销毁, 会被保存到内存堆中.
这样就形成了闭包.