JavaScript--Function对象(函数)的声明和作用域

Funtion 封装了可重复使用的代码块对象,函数名是一个引用函数对象的变量
 声明提前:在程序开始执行之前,将var 变量和function函数提前声明 但赋值并不会提前

它的三种创建方法:
 创建1
function fun1(){
var num =10;
num++;
}
// 创建2  
var fun2 = function(){// 将函数赋值给变量 声明不会提前
console.log(1);
}
// 创建3 new Funtion()
var fun3 = new Function("a","b","return a+b;");//所有形参必须放在""中
var fun4 = Function("a","b","return a+b;");

函数的提前声明:

/*f();//2
function f(){console.log(1)}    
f();//2
function f(){console.log(2)}
f();//2    
console.log(typeof(f));//function    
var f = 100;
console.log(f);//100
console.log(typeof(f));//number
f();//报错,TypeError f是一个number类型的原始数据类型,并不是一个函数*/

  执行这一段代码时:函数f()会提前声明 等同于:

  function f(){console.log(1)}
  function f(){console.log(2)}//使用同名函数后者会覆盖前者
  f();//2
  /*f();//2
  f();//2
  console.log(typeof(f));//function
  var f = 100;//定义一个f 变量并赋值为10 这时f已经变成了number类型 不再是function
  console.log(f);//100
  console.log(typeof(f));//number
  f();//报错,TypeError f是一个number类型的原始数据类型,并不是一个函数*/

作用域:

在js中变量是有作用域(scope)的 它限定了一个变量的可使用范围

全局作用域window:全局变量

函数作用域:局部变量  在函数中 没有用var关键字声明的变量是全局变量

而作用域链就是多级作用域连续引用形成的结果,

作用域链在程序运行中访问顺序是:先从局部变量也就是自己的作用域中查找若找不到此变量 再到父级作用域中去寻找变量的值

借用一段代码来搞清楚作用域链:

JavaScript--Function对象(函数)的声明和作用域_第1张图片

 

你可能感兴趣的:(JavaScript--Function对象(函数)的声明和作用域)