Javascript函数
什么是函数?
函数就是完成某个功能的一组语句,函数由关键字
function
函数名加一组参数定义函数在定义后可以被重复调用,通常将常用的功能写成一个函数
利用函数可以使代码的组织结构更多清晰
function say_hello (name, msg){
alert("hello"+ name + ":"+ msg);
}
say_hello(“david”, “how are you today?”);
如何定义一个函数?
定义函数的方法有很多种:
1、函数声明
function sum1(n1,n2)
{
console.log(n1+n2);
}
sum1(1,2); //3
2、函数表达式(存储在变量中)
var sum2 = function(n1,n2)
{
console.log(n1+n2);
}
sum2(1,2); //3
函数重构
function demo()
{
console.log('js函数');
}
demo();
function demo()
{
console.log('覆盖的js函数');
}
demo();
使用 return 语句从函数返回值
function sum (num1, num2){
return num1 + num2;
}
var s = sum(1, 2);
alert(s);
注意:
位于return 语句之后的任何代码都永远不会执行!
在JavaScript中,不一定要指定返回值!
函数参数设置默认值
function sum (a=1, b=2)
{
return a + b;
}
console.log(sum());
console.log(sum(10));
console.log(sum(10,20));
函数参数总数获取
function demo(a,b,c,d)
{
return 1;
}
console.log(demo.length);
模板字符串
let demo = 'ES6';
let str = `Hello ${demo}`;
console.log(str);
箭头函数
var f = v => v;
//等价于
var f = function(a){
return a;
}
f(1); //1
console.log(f(1))
- 函数体中的 this 对象
function fn(){
setTimeout(()=>{
// 定义时,this 绑定的是 fn 中的 this 对象
console.log(this.a);
},0)
}
var a = 20;
// fn 的 this 对象为 {a: 19}
fn.call({a: 18}); // 18
- 不定参数
function f(...values){
console.log(values.length);
}
f(1,2); //2
f(1,2,3,4); //4
什么是全局变量?什么是局部变量?
- 变量既可以是全局,也可以是局部的
- 全局变量:可以在脚本中的任何位置被引用,一旦你在某个脚本里声明了全局变量,你就可以在这个脚本的任何位置(包括函数内部)引用它,全局变量的作用域是整个脚本;
- 局部变量:只存在于对它做出声明的函数内部,在函数的外部无法相用它,局部变量的作用域仅限于函数内部
var global = "global";//全局变量
function test()
{
var local="local"; //局部变量
global2="global2"; //全局变量
}
在函数外用var声明的变量一般就是全局变量
定义在函数当中,但是没有用var声明的是全局变量
定义在函数当中,用var声明的是局部变量
递归函数
递归函数:在函数里面调用自己 从而实现循环的效果
function test(num)
{
if(num == 0 || num == 1){
return 1;
}
return num*test(num-1);
}
document.write("5的阶乘为:"+test(5));
回调函数
在js当中我们可能会常常见到一种函数叫做回调函数,回调函数一般在执行完一些操作后所调用的函数.
function A(callback) {
callback('stuff', 'goes', 'here');
}
function B(a, b, c) {
console.log(a + " " + b + " " + c);
}
A(B); //B就是我们的回调函数
闭包函数
闭包就是一个函数能够访问其函数外部作用域中的变量。
简单来说闭包就是定义在函数体内部的函数。
闭包的三大特点为:
1、函数嵌套函数
2、内部函数可以访问外部函数的变量
3、参数和变量不会被回收。
代码结构:
function test()
{
var a = 1;
return function ()
{
console.log(a);
}
}
var demo = test();
demo();
立即调用的函数表达式
(function(){ /* code */ })();
这种写法都是以圆括号开头,引擎就会认为后面跟的是一个表示式,而不是函数定义。
所以就避免了错误,这就叫做“立即调用的函数表达式”
var i = function(){ return 10; }();
console.log(i)
eval
eval 接受一个字符串类型的参数,将这个字符串作为代码在上下文环境中执行,并返回执行的结果
var i = 1;
eval("i = i + 1");
eval("alert(i);");