<script type="text/javascript">
function Person() { //创建一个函数
getAge = function () { //getAtge在函数中定义是没有写var关键字,所以是全局作用域的
console.log(10)
}
return this
}
Person.getAge = function () { //给Person添加一个方法
console.log(20)
}
Person.prototype.getAge = function () { //在Person的原型值添加一个属性getAge
console.log(30)
}
var getAge = function () { //用var声明创建的的函数,叫函数表达式且不会提前声明,但变量会提前声明
console.log(40)
}
function getAge() { //使用函数声明创建的函数,会在所有代码执行前被创建,也可在之前调用
console.log(50)
}
</script>
</body>
</html>
function Person() { //创建一个函数
getAge = function () { //getAtge在函数中定义是没有写var关键字,所以是全局作用域的
console.log(10)
}
return this
}
Person.getAge = function () { //给Person添加一个方法
console.log(20)
}
Person.prototype.getAge = function () { //在Person的原型值添加一个属性getAge
console.log(30)
}
var getAge = function () { //用var声明创建的的函数,叫函数表达式且不会提前声明,但变量会提前声明
console.log(40)
}
function getAge() { //使用函数声明创建的函数,会在所有代码执行前被创建,也可在之前调用
console.log(50)
}
Person.getAge() // 20 调用Person.getAge()输出20
getAge() // 40 //全局中有两个getAge,函数创建的提前声明,然后被函数表达式覆盖,所以输出的是40
Person().getAge() // 10 //调用 Person()函数,执行里面的代码,全局的getAge被覆盖,它的返回值是this指向window,然后去全局中找getAge
getAge() // 10 调用getAge()函数,现在的值是10,因为Person()函数调用时里面代码被执行覆盖之前的值
new Person.getAge() // 20 new一个 Person.getAge() ,然后将新创建的对象作为一个返回值返回
</script>
</body>
</html>