『Javascript基础重点』1.提前声明问题,你苦恼写了js函数代码但是不会生效的问题吗?


欢迎关注 『Javascript基础重点』 专栏,持续更新中
欢迎关注 『Javascript基础重点』 专栏,持续更新中
介绍一些Javascript的基础重点知识,包括并不限于函数作用域与提前声明和对象的构造函数等问题。

1. var与声明提前不可不说的故事

<script type="text/javascript">
	a=1;
	var b=2;
</script>

上述分别声明变量a和b,但是因为a声明时前面没有var,所以在代码执行之初,就先提前声明了a。
而b声明前带有var,表示按照代码顺序执行声明。

省流总结:没有带var的声明就是声明提前。就是在调用函数或者变量时,注意先后顺序,没有声明提前就必须在声明的代码后才能调用,而声明提前可以再声明的代码前就调用。


2. 变量的声明提前例程

		 * 变量的声明提前
		 * 	- 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值),
		 * 		但是如果声明变量时不适用var关键字,则变量不会被声明提前

2.1 对于函数内外值的改变(关键区别,第二点和第三点目前没有遇到)

    <script type="text/javascript">
      var a = 123;
      var b = 456;

      //函数内使用var,局部变量,不会对外部的ab值产生影响
      function mzh() {
        a = 1;
        b = 2;
        alert("函数内" + a);
        alert("函数内" + b);
      }
      mzh();
      alert("函数外" + a); //123
      alert("函数外" + b); //456

      //函数内不使用var,会重置掉外部的ab全部变量
      function mzh() {
        a = 1;
        b = 2;
        alert("函数内" + a);
        alert("函数内" + b);
      }
      mzh();
      alert("函数外" + a); //1
      alert("函数外" + b); //2
    </script>

2.2 delete删除

在全局作用域下,使用var定义的变量不可以delete,没有var 定义的变量可以delete.也就说明隐含全局变量严格来说不是真正的变量,而是全局对象的属性,因为属性可以通过delete删除,而变量不可以。

2.3 提升变量声明

    <script type="text/javascript">
      //变量使用 var 定义
      function qwer() {
        console.log(a);
        var a = "2222222222";
      }
      qwer(); // 控制台:“undefined”

      //变量没有使用 var 定义:
      function asdw() {
        console.log(a);
        a = "1111111111";
      }
      asdw(); // 控制台上:“Uncaught ReferenceError: a is not defined”
    </script>

3. 函数的声明提前例程

		 * 函数的声明提前
		 * 	- 使用函数声明形式创建的函数 function 函数(){}
		 * 		它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数
		 * 	   使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用	
		<script type="text/javascript">
            mzh("声明提前!我在声明代码前调用");
            function mzh(message){
                alert(message);
            }
            mzh("声明提前!我在声明代码后也能调用");


            
            //qwer("带有var,声明没有提前!如果在var声明的函数前调用,函数不会被调用,不会有效果,如果不注释还会让后面的代码都不能生效"); 
            var qwer=function Later_mzh(message){
                alert(message);
            };
            qwer("带有var,声明没有提前!必须在声明函数后部分调用");
		</script>

总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『Javascript基础重点』 专栏,持续更新中
欢迎关注 『Javascript基础重点』 专栏,持续更新中
『1.提前声明问题,你苦恼写了js函数代码但是不会生效的问题吗?』
『2.易错点之函数形参与函数作用域的坑』
『3.了解原型对象优雅地构造函数の“JS中的Java继承” 提高运行效率,优雅地使用对象』
『4.JS垃圾回收机制简析』
『5.以toString()为例学习JS中的java方法重写』
『6.数组的常用方法与数组遍历』
『7.函数进阶之call()和apply()与arguments』
『8.Date类与利用时间戳来测试代码的执行的性能』
『9.Math类方法』
『10.包装类』
『11.字符串的方法』
『12.正则表达式介绍 邮件正则表达式写法』
『13.dom的应用』
『未完待续』


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值