函数声明及调用

2018-01-27  本文已影响0人  zy懒人漫游

函数调用

首先用function 声明一个函数

function sayHello(){   //sayHello  是一个函数名
  console.log('zhouyi')  //里面的是函数体
}
sayHello()  //  zhouyi  调用函数名,打印出结果,如果不调用不会打印结果

声明不必放调用前面

sayHello() 

function sayHello(){ 
  console.log('zhouyi')
}

这样也是可以的,但是中间不能有其他的函数。

函数调用

var sayHello = function(){
  console.log('zhouyi')
}
sayHello() 

在函数调用里面,声明必须放调用的前面。因为相当于把函数当成一个值,只不过值的内容是一个函数,然后调用的时候,你要有值才能去调用,所以,声明必须放调用的前面。

声明前置,

在一个作用域下,var 声明的变量和function声明的函数会前置

不加var作用

不加var 会声明一个全局变量,如果真的需要一个全局变量,也应该在最外层 作用域使用var声明。

function fn(){
  a = 1 ;
}
fn();
console.log(a);  //1

立即执行函数表达式:声明一个匿名函数,然后立即执行。这是它的2种写法

(function(){
  var a = 1;
})()
console.log(a);//undefined 

因为a是独立作用域下的a,只是做了个声明,和console.log(a)没有半毛钱关系。

作用,隔离作用域,避免全局变量

function fn(){
  var a ;
  a =1;
  console.log(a);
}
fn()

等同于

(function(){
  var a ;
  a =1;
  console.log(a);
})()

另一种写法,

!function(){
  var a ;
  a =1;
 console.log(a);
}()
创建独立作用域,隔离外部变量,不受干扰。

注:“!”可以是任何单个符合,例如!@#¥%,不能用()、'、"这样的符号

还有种情况

function fn(i,j){}
类似于,但不是完全等价于
function fn(){
  var fn = arguments[0];
  var fn = arguments[1];
}

举个例子

var a = 100;
 !function(a){
    a =1;
 }(/*没有传参*/)
console.log(a); //100

因为a没有传参数,而且a没有打印, console.log(a)打印的是全局变量a,结果输出为100。

假如a传参了,如下所示

var a = 100;
 !function(a){
    console.log(a)// 打印的的第一个数99
 }(99)
console.log(a); //打印的的第二个数100

同样的,再举个例子

var a = 100;
 !function(a){
    console.log(a)// 100
 }(a)

为什么是这样呢,因为console.log(a)打印出来的是函数中的a,只是后面传的参数是全局变量中的a,由于全局变量中声明了a并赋值100,所以打印出来的值也是100。立即执行函数里的a和全局变量中的a,没有半毛钱关系,只是刚好传参进去了而已。

上一篇 下一篇

猜你喜欢

热点阅读