javascript中的函数(基础)

139 阅读2分钟

1.函数的定义

为什么要用到函数?

封装重复性代码,解决冗余

函数的形式

function fn(){
//执行的代码
}

函数用function关键字声明(就像用var声明变量),fn是函数的名字(可以自定义,注意命名规范),{ }是函数执行体,存放执行代码.

函数的调用

函数创建之后还需要调用,直接用**函数名()**进行调用

例子

function sayHello(){
    alert("hello world");
}
sayHello();//调用

2.函数传参

函数中还可以传入参数(这些参数称为形参,作为实参的管道入口)

eg:

function say(name){
    alert("hello"+name)
}
say("john");

函数可以接收多个参数,可以是任意类型,但是一般不要多余4个。

3.函数返回值

在函数中用return(作为管道出口)来返回函数的执行结果。

eg:

function add(a,b){
    return a+b;
}
add(1,2);//3

4.函数表达式

是创建函数的一种写法(详细请看函数的几种创建方式),将一个匿名函数赋值给一个变量

var add=function(a,b){
   return a+b;
}
add();

5.函数作用域

1.全局作用域

在函数外定义的变量,既可以在函数外使用,也可在函数内部使用。

eg:

var name='john';//全局变量
    function sayHello(){
	console.log("hello"+name)//局部使用
    };
   sayHello();
   console.log(name);//全局使用

2.局部作用域

在函数内声明的变量,只能在函数内部使用。

eg:

function sayGood(){
   var word="good";//局部变量
   console.log("hello"+word);//局部使用
}
sayGood();
console.log(word);//报错

tips:形参也是局部变量。

特殊情况

有时函数内部未用var关键词声明变量,此时此变量将作为全局变量使用。

eg:

function say(){
   name='john'; 
   console.log(name);
}
console.log(name);//john
say();

3.全局污染

不同的js文件如果使用了相同的全局变量,或者定义了相同名字的函数,就会造成命名冲突,后调用的会覆盖前调用的,称之为全局污染。

如下:

<script  src="first.js"></script>
<script src="second.js"></script>
<script>
    hello();//jack
</script>
	

first.js中的代码为

var name='john';
function hello(){
    console.log(name);
}

second.js中的代码为

var name="jack";
function hello(){
    console.log(name);
}

如何解决全局污染

可以用自执行函数( ) ( ),改变作用域。

此时first.js代码为

(function(){
    var name='john';
    var hello=function hello(){
	console.log(name);
        window.first = hello;
    }
})();

同理second.js代码为

(function(){
    var name="jack";
    var hello=function hello(){
	console.log(name);
       	window.second=hello;
    }
})();

调用:

<script  src="first.js"></script>
<script src="second.js"></script>
<script>
    first();//john
    second();//jack
</script>