函数

函数

在JavaScript中函数就是具有特定功能的代码段,可以分为两部分 声明 + 调用

1.函数的声明与调用

声明一个函数可以调用无数次(每次调用都是相互独立的)

  • function关键字声明 (实名函数->有名字的函数)
function 函数名(){
    //函数体
} 
  • 表达式声明(将一个匿名函数赋值给某个变量)
var 变量名 = function(){
   //函数体  ->特定功能的代码段
}
  • 函数的调用
函数名();

2.函数的简单使用

// 求1-100的和
//声明函数
function sum(){
    var total = 0;
    for(var i = 1;i<101;i++){
        total+= i;
    }
    console.log(total);
}
//调用函数
sum();

3.函数的参数

  • 形参:形式上的参数 (形参可以没有,可以是一个,也可以是多个,每个之间用逗号隔开)
  • 实参:具体的值
function 函数名(形参1,形参2,...){
    函数体;
}

函数名(实参1,实参2,...);

4.函数的arguments

  • arguments是函数独有的 (实参的一个类数组集合)
// 求任意数字之和
function sum2() {
    var total = 0;
    // 将arguments集合中的每一项取出来相加
    for(var i = 0;i<arguments.length;i++){
        // console.log(arguments[i]);
        total += arguments[i];
    }
    console.log(total);
}

sum2(100, 200, 300, 10, 20, 30, 50);
sum2(100, 200, 300, 10, 20, 30, 50, 200, 300, 1000);
sum2(100, 200, 300);
sum2(100, 200);

arguments注意问题

function test2(a, b) {
    // arguments这个集合 和  a,b是一一对应的 (一个改变另一个也改变)
    console.log(arguments);
    console.log(arguments[0]);
    // 修改实参的值
    // 利用arguments修改了实参的值 形参的值也就变了
    arguments[0] = "哈哈";
    console.log(a);

    var b = "你好啊"; //变量b将形参b的值覆盖了
    console.log(b); //你好啊    
    console.log(arguments[1]); //你好啊
}

test2(100, 200);

5.函数注意问题

  1. 函数的重复命名 ,后边的覆盖前边的

  2. 函数的参数个数

    • 实参个数等于形参个数 一一对应进行赋值

    • 实参个数小于形参个数 一一对应进行赋值,没有赋值的形参默认值是undefined

    • 实参个数大于形参个数 一一对应进行赋值,超出实参没影响(没有形参接收)

  3. 参数类型

    • 函数的实参可以任意数据类型
  4. 函数中的this (this表示当前行为执行的主体)

    1. 在事件处理函数中this是触发的那个元素
    2. 函数调用就看前边有没有点,没有点this就是window,有点点前面是谁就是谁

在全局作用域下定义的变量或方法都是window的属性或方法,window可以省略

6.函数高级

在js中可以分全局作用域和局部作用域(私有作用域)

全局作用域:在srcript标签内,函数之外称之为全局作用域

局部作用域:(私有作用域):函数执行形成私有作用域

全局变量:全局作用域下定义的变量或者方法称之为全局变量方法

  • 特点:可以在任意地方使用或修改

局部变量:在局部作用域中定义的变量或方法称之为局部变量或方法

  • 特点:只能在当前作用域下使用 (只能在这个作用域里边去使用),外界不能够使用或修改

预解析

预解析(变量提升)

js代码运行到浏览器,浏览器提供了一个供js代码执行的环境,在代码执行之前先进行了预解析;会把全局作用域下所有带有var 和 function关键字的进行预解析 (全局作用域下预解析)(预解析完成代码从上到下执行)

预解析分为以下两部分

  • 声明:var a; 只是声明了没有赋值
  • 定义 a = 100; 赋值的操作

预解析的时候,带有var关键字的是只声明不定义,而带有function关键字是声明+定义

函数执行

首先函数执行形成私有作用域(局部作用域),函数体中代码从上到下执行,函数执行完毕会自动销毁;

全局下的预解析

console.log(a,b);//undefined undefined
var a = 10;
var b = 10;
console.log(a,b);//10 10 


fn();

function fn(){
    console.log("哈哈");
}

fn();
fn();

全局作用域下的预解析

局部作用域下的预解析

函数执行形成一个局部作用域(私有作用域),函数体中的代码从上到下执行之前先进行形参赋值和预解析, (私有作用下预解析,解析的是私有作用域下的带有var和function关键字)(预解析完成代码从上到下执行) 其它的和全局作用域下的预解析是一样的;

私有作用域下的预解析

作用域链

首先作用域链是一种查找机制,在当前作用域下用到某个变量或方法,先看当前作用域下有没有,没有往上一级作用域进行查找,上一级作用域没有再往上一层作用域进行查找依次类推,直到找到全局作用域为止;找不到就就报错了

作用域链

函数的返回值

函数默认是没有返回值的,默认值是undefined

就是将函数内部的值返回给外界

语法:return 值;

  • return的作用
    • 首先是将函数内部的值返回给外界 (需要什么就return什么即可)
    • 退出当前函数 (一旦遇到return函数就结束了,return之后的代码就不再执行了)

获取经过浏览器渲染的样式

标准浏览器下(只读) IE8及以下不兼容

getComputedStyle(元素对象).样式属性;

IE下独有的

元素对象.currentStyle.样式属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值