JavaScript函数的进阶

本文深入探讨JavaScript的作用域,包括全局作用域和函数作用域,强调函数内部变量不会污染全局。同时,介绍了函数表达式的特性,它们不会提前声明,避免全局污染。接着讲解了立即执行函数的用法,以及函数作为参数传递和在数组中的使用。此外,还涵盖了函数参数的传递方式和预编译阶段的变量与函数提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript函数的进阶

作用域

  1. 全局作用域
    写脚本块中的代码
    全局作用于中声明的变量,会被提前到代码块的顶部进行定义,成为全局对象的属性

  2. 函数作用域
    函数内部定义的变量,会被提升到函数代码块中的顶部,并且不会成为全局对象的属性

    函数中声明的变量不会造成全局污染,把每一个功能封装到函数中

函数表达式

  • 函数表达式不会被提前声明,不会污染全局

// 字面量创建函数
// function test(){

    // }

    var a = function test(){
        console.log('Helloworld');
    }
    // test();  执行不成功
    a();
    console.log(b);// undefined
    console.log(typeof b);// undefined
    // b();// 报错  
    var b = function(){  // 匿名函数
        console.log('oys');
    }
    b();

    console.log(demo);
    demo();
    function demo(){
        console.log('demo');
        function fn(){
            console.log('1111')
        }
    }
    demo();//  执行之后  里面fn才会提升声明


    // function  引用数据类型

    // 基本数据类型 
    // 引用数据类型 function object Array    Object
    // instanceof  
    var obj = {
        a:'oys',
        b:function(){
            console.log('oys');
        }
    }
    obj.b();// oys
    var fn = obj.b;
    fn();// oys 


    // 把函数作为参数进行传递
    var b = function(){
        console.log('康师傅');
    }
    function wk(call){
        console.log(call); // function(){console.log('康师傅');}
        call();
    }
    wk(b);

    // 控制台输出??
    // 函数体
    // 康师傅



    // 函数放在数组中
    var arr = [1,'oys',function(){console.log(1)}];
    arr[2]();

## 函数参数

- 基本数据类型  按值传递
- 引用数据类型  按地址传递

## 立即执行函数

js中,把一个函数变成函数表达式,用小括号包裹起来

```js
(function(){})()
(function(){}())

function(){}()

预编译

  • js解释型语言,解释一句执行一句
  1. 语法的检测
  2. 预编译
    变量和函数的提前声明
    全局预编译
    1. 创建一个GO对象 Global Object
    2. 将var关键字声明的变量当作GO对象的属性,赋值为undefined,有重名的直接覆盖
    3. 将function关键字声明函数 当作GO对象的属性,值为函数体,重名直接覆盖
      函数预编译
      函数执行的前一刻开始
    4. 创建一个AO对象 Activation Object 执行期上下文对象
    5. 函数的形参,成为AO对象的属性,值为实参的值,若未传值,值为undefined
    6. 将var关键字声明的变量,成为AO对象的属性,值为undefined,遇到已经存在的,不做任何变化
    7. 将function声明的函数 成为AO对象的属性 值为函数体,重名直接覆盖
  3. 代码执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值