函数定义的三种方式与特点:
1.函数声明;(特点:会被前置;重复定义函数时,最后一次定义有效。)
2.函数表达式;
3.函数实例化;(特点:只能访问本地作用域与全局作用域!!!)
/* 对象实例化定义函数的特点 */ var person = {name:"刘德华", age:50}; (function(){ var person = {name:"刘德华", age:30}; (function() { var person = {name:"刘德华", age:10}; console.log(person.name+person.age+"岁"); })() })(); // -->输出10岁的刘德华,变量逐级向上回溯。 var person = {name:"刘德华", age:50}; (function(){ var person = {name:"刘德华", age:30}; var func = new Function("console.log(person.name+person.age+'岁');"); func(); })(); //-->如果new Function()里面有10岁的刘德华,则为10岁的,否则直接50岁的。
函数调用:
1.函数调用模式; add(1)
2.方法调用模式; myNumber.add(1)
3.构造函数调用模式; new Function(...)
// /* 函数调用模式(this) */ function add(i,j){ console.log(this); // --> window console.log(arguments); //--> [1,2] (function(){ console.log(this); // --> window })(); var sum = i+j; return sum; } add(1,2); var myNumber = { value: 1, add: function(i){ console.log(this); // --> {value:1,add:function(){}} var helper = function(i){ console.log(this); // --> window this.value += i; //所以这个实现不了; } helper(i); } } myNumber.add(1);