目录

1:函数的其他定义

2:函数作为参数

3:函数作为返回值

4:作用域

5:作用域链

6:预解析

7:预解析分段

复习

<script>

    /*
* 复习:
* 函数:把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了
*
* 函数作用:代码重用
*
* 函数的参数:
* 1.形参:函数定义的时候,函数名字后面的小括号里的变量
* 2.实参:函数调用的时候,函数名字后面的小括号里的变量或者值
*
* 返回值:
* 函数中有return,函数有返回值
* 函数中没有return,函数没有返回值
* 没有明确返回值:函数中没有return或者return后面没有任何内容
* 如果一个函数没有明确的返回值,接收这个函数,结果是undefined
*
* 无参数无返回值的函数
* 无参数有返回值的函数
* 有参数无返回值的函数
* 有参数有返回值的函数
*
* arguments----->可以获取函数调用的时候,传入的实参的个数
* arguments是一个对象,是一个伪数组
* arguments.length--->是实参的个数
* arguments[索引]---->实参的值
*
* 作用域:变量的使用范围
* 全局作用域:全局变量在任何位置都可以使用的范围
* 局部作用域:局部变量只能在某个地方使用---函数内
* 作用域链:在一个函数中使用一个变量,先在该函数中搜索这个变量,找到了则使用,找不到则继续向外面找这个变量,找到则使用,一直找到全局作用域,找不到则是undefined
* 全局变量:只要是在函数外面声明的变量都可以看成或者是理解成是全局变量
* 局部变量:在函数中定义的变量
*
* 预解析:在执行代码之前做的事情
* 变量的声明和函数的声明被提前了,变量和函数的声明会提升到当前所在的作用域的最上面
* 函数中的变量声明,会提升到该函数的作用域的最上面(里面)
* 如果有多对的script标签都有相同名字的函数,预解析的时候是分段的,互不影响
*
* */
</script>

内容

1:函数的其他定义

<script>

    /*
* 命名函数:函数如果有名字,就是命名函数
*
* 匿名函数:函数如果没有名字,就是匿名函数
*
* 函数的另一种定义方式
* 函数表达式:
* 把一个函数给一个变量,此时形成了函数表达式
* var 变量=匿名函数;
* 例子:
* var f1=function (){
*
* };
* 如果是函数表达式,那么此时前面的变量中存储的就是一个函数,而这个变量就相当于是一个函数,就可以直接加小括号调用了
* f1();
*
* 注意:
* 函数表达式后面,赋值结束后,要加分号
*
*
*
* 函数定义:
* 1. 函数声明--函数定义
* function 函数名(){
* 函数体
* }
*
* */ // var f1=function(){console.log("阿涅哈斯诶呦");};
// f1(); //函数的自调用,没有名字,调用---声明的同时,直接调用
//一次性的--------
// (function(){console.log("阿涅哈斯诶呦");})();
// (function(){console.log("嘎嘎")})(); //
// function f1() {
// console.log("哈哈,我又变帅了");
// }
// f1();//函数调用
// //如果一个函数能够调用: 函数的代码();
//
// //函数表达式
// var f2 = function () {
// console.log("哈哈,真的好帅哦");
// };
// //匿名函数不能直接调用
// f2();
//
//
// var f4 = function () {
// console.log("我是一个函数");
// };
// f4();
//
//
//
// var num=10; //函数声明
function f1() {
console.log("助教好帅哦");
}
f1();
function f1() {
console.log("小苏好猥琐哦");
}
f1(); //函数表达式
var f2 = function () {
console.log("助教没有小杨帅");
};
f2();
f2 = function () {
console.log("小杨真的很帅");
};
f2();
//函数自调用
(function () {
console.log("阿涅哈斯诶呦");
})();
(function () {
console.log("嘎嘎")
})(); // var num=10;
// console.log(num);
// num=100;
// console.log(num);
</script>

2:函数作为参数

  <script>

    //函数可以作为参数使用,如果一个函数作为参数,那么我们说这个参数(函数)可以叫回调函数
//只要是看到一个函数作为参数使用了,那就是回调函数 function sayHi(fn) {
console.log("您好啊");
fn();//fn此时应该是一个函数
}
function suSay() {
console.log("我猥琐,我邪恶,我龌龊,小苏说");
} sayHi(suSay); // function f1(x,y) {
// console.log(x+y);
// }
// f1(10,20);
//
// function f2(x,y) {
// console.log(x+y);
// }
// f2("小苏","猥琐");
// function f3(x) {
// console.log(x);
// }
// f3(true); //函数声明,fn是变量,fn是参数,
// function f1(fn) {
// fn();//函数调用---说明fn这个变量中存储的是一个函数
// }
//
// function f2() {
// console.log("哦,这也可以");
// }
// f1(f2); // var f1=function () {
// console.log("哈哈");
// }; </script>

3:函数作为返回值

<script>
//结论:函数是可以作为返回值使用的:
function f1() {
console.log("f1函数调用了");
return function () {
console.log("这是一个函数");
};
} var ff=f1();//调用
//ff就是一个函数了
ff(); </script>

4:作用域

<script>
//作用域:使用范围
/*
*
* 全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用
* 除了函数以外,其他的任何位置定义的变量都是全局变量
* 局部变量:在函数内部定义的变量,是局部变量,外面不能使用
* 全局变量,如果页面不关闭,那么就不会释放,就会占空间,消耗内存
*
* 全局作用域:全局变量的使用范围
* 局部作用域:局部变量的使用范围
*
* 块级作用域:一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中在这个块级作用域中定义的变量,外面也能使用;
* 说明:js没有块级作用域,只有函数除外
*
* 隐式全局变量:声明的变量没有var,就叫隐式全局变量
* 全局变量是不能被删除的,隐式全局变量是可以被删除的
* 定义变量使用var是不会被删除的,没有var是可以删除的
*
*
* */ // function f1() {
// number=1000;//是隐式全局变量
// }
// f1();
// console.log(number); // var num1=10;
// num2=20;
// delete num1;//把num1删除了
// delete num2;//把num2删除了
// console.log(typeof num1);
// console.log(num1+10);
// console.log(typeof num2); // num=100;
// console.log(num); //扩展:隐式 // function f1() {
// var num=100;
// num+=10;
// }
// f1();//这个函数结束之后 // {
// var num=10;
// console.log(num);//10
// }
// console.log(num); // if(true){
// var num=10;
// }
// console.log(num);
// for(var i=0;i<5;i++){
// var number=20;
// }
// console.log(number); // var i=0;
// while (i<5){
// var num=100;
// i++;
// }
// console.log(num); // function f1() {
// var num=10;
// }
// f1();
// console.log(num); // var num=10;
// console.log(num);//10
</script>

5:作用域链

 <script>

    var num=10;
function f1() {
var num=20;
function f2() {
var num=30;
function f3() {
var num=50;
console.log(num);
}
f3();
}
f2();
}
f1();
</script>

6:预解析

<script>
//预解析:提前解析代码
/*
*
* 预解析:就是在解析代码之前
* 预解析做什么事?
* 把变量的声明提前了----提前到当前所在的作用域的最上面
* 函数的声明也会被提前---提前到当前所在的作用域的最上面
*
*
* */ //函数调用的时候,把会函数的声明提升到作用域的上面
// f1();//调用
// var num=20;//这个变量的声明会提升到变量使用之前
// function f1() {
// console.log(num);
// //var num=10;
// } // function f1() {
// console.log("小苏好猥琐");
// }
//
//
// f1();
// function f1() {
// console.log("小苏没有助教猥琐");
// }
// f1(); //把变量的声明提前了
// var num;
// console.log(num);
// num=10;
// function f1() {
// console.log("哈哈,助教好猥琐哦");
// }
//f1();//报错 </script>

7:  预解析分段

  <script>
//预解析中,变量的提升,只会在当前的作用域中提升,提前到当前的作用域的最上面
//函数中的变量只会提前到函数的作用域中的最前面,不会出去
//预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突) // function f1() {
//
// console.log(num);//undefined
// var num=10;
// }
// f1();
// console.log(num);// function f1() {
console.log("哈哈");
} </script>

注意

14 (H5*) JS第4天 函数、作用域、预解析的更多相关文章

  1. ECMAScript1.3 数组 | 函数 | 作用域 | 预解析

    数组array 数组可以存储很多项,有顺序,很多项形成一个集合,就是数组. 数组字面量是:[] 如何获取数组中的数据:索引/下标,数组中的第一项的索引是从0开始的. ['kay', 'andy', 1 ...

  2. 进击JavaScript核心 --- (2)函数和预解析机制

    一.函数 每个函数都是 Function类型的实例,也具有属性和方法.由于函数也是一个对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 1.函数的定义方式 (1).函数声明 fun ...

  3. JavaScript变量提升和函数声明预解析

    1.首先理解函数作用域 在JavaScript中,变量的定义并不是以代码块作为作用域的,而是以函数作用作用域的.也就是说,如果变量是在某个函数中定义的,那么它在函数以外的地方是不可见的.而如果该变量是 ...

  4. 关于js语法中的一些难点(预解析,变量提前,作用域)

    ******标题很吓人************ 其实就是一个小小的例子 ,从例子中简单的分析一下作用域.预解析和变量提前的概念 <!DOCTYPE html> <html> & ...

  5. JS——变量和函数的预解析、匿名函数、函数传参、return

    JS解析过程分为两个阶段:编译阶段.执行阶段.在编译阶段会将函数function的声明和定义都提前,而将变量var的声明提前,并将var定义的变量赋值为undefined. 匿名函数: window. ...

  6. [妙味JS基础]第六课:作用域、JS预解析机制

    知识点总结 浏览器的解析方法 script 全局变量,全局函数 自上而下 函数 由里到外 "JS的解析器": 1)“找一些东西”:var function 参数 var a=未定义 ...

  7. js---07 js预解析,作用域---闭包

    js解析器首先不会逐行读代码,这是第二部了. 首先 根据var找到变量,根据function找函数,找到变量var a = 1,js解析器只会读取等号前面的var a,并把a设置值未定义,并不会读取等 ...

  8. JavaScript 之有趣的函数(函数声明、调用、预解析、作用域)

    前言:“函数是对象,函数名是指针.”,函数名仅仅是指向函数的指针,与其他包含函数指针的变量没有什么区别,话句话说,一个函数可能有多个名字. -1.函数声明,function+函数名称.调用方法:函数名 ...

  9. javascript-初级-day06作用域、JS预解析机制

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

随机推荐

  1. centos 7 安装相关环境

    How To Create a Sudo User on CentOS 7 https://www.digitalocean.com/community/tutorials/how-to-create ...

  2. 欧拉降幂公式 Super A^B mod C

    Description Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=100000 ...

  3. git log混乱之混乱操作

    好几个分支 然后就混乱了 git log信息一坨屎 git 删除某次指定的提交 git reset只是在本地仓库中回退版本,而远程仓库的版本不会变化. 以删除master分支为例 #新建一个备份的分支 ...

  4. linux shell 命令笔记

    标准输入.标准输出.标准错误 File descriptors are integers associated with an opened file or data stream. File des ...

  5. CodeMix使用教程:构建自定义DevStyle主题

    [MyEclipse CI 2019.4.0安装包下载] DevStyle主题允许开发人员自定义工作台,无论是喜欢带有明亮图标的浅色背景还是带有柔和色彩的神色背景,开发人员都可以将工作台调整到适合的色 ...

  6. 前端使用crypto-js进行加解密

    import CryptoJS from 'crypto-js' export const crypto = { options() { return { key: CryptoJS.enc.Utf8 ...

  7. jquery-时间轴滑动

    效果预览图: html: <div class="tim"> <div class="timdiv"> <div class=&q ...

  8. React 之React.createContext

    使用Context,可以跨越组件进行数据传递 import React from 'react'; import ReactDOM from 'react-dom'; const ThemeConte ...

  9. PHP入门培训教程 PHP变量的使用

      很多朋友在编写PHP程序的时候有时候对变量总有着不能确定的问题,而且也有很多问题就是因为变量的处理不当所造成的.这里兄弟连PHP培训 小编,就PHP变量系统说一下. PHP的变量分为全局变量与局部 ...

  10. springboot集成mongoDB需要认证

    报错: Mon Nov 25 01:09:48 CST 2019 There was an unexpected error (type=Internal Server Error, status=5 ...