分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

js作用域相关知识总结

发布时间:2023-09-06 01:46责任编辑:林大明关键词:js作用域

以前总是搞不清楚js里面的作用域、块级作用域、预解析,做题总做错,今天彻底搞明白了,来记录梳理一下~

块级作用域

在其他语言中,任何一对花括号中的语句都属于一个块儿,在这之中定义的所有变量在代码块外都是不可见的。Js中没有块级作用域

  一个感觉在面试中会经常遇到的问题

for(var i =0;i<10;i++){ ???var num = 100;}console.log(i); ?//i是多少

  第一反应是i是9,但是错了,i是10。因为按照循环条件,i肯定是在0-10之间,当i=9的时候,都还在执行循环体,然后9++到10,不符合循环条件,跳出循环,所以此时i是10

  

变量的使用范围

  1.局部变量

  因为js里面没有块级作用域,当一个变量声明在函数的内部,此时这个变量叫做局部变量,它不能在函数外部被访问到

function f1(){ ???var num = 1000;} ???f1();console.log(num);

       2.全局变量

  直接在script标签中定义的变量,或者说是不在函数中定义的变量都叫做全局变量

 ???var num = 1000;</script><script> ???function f1(){ ???????console.log(num); ???} ???f1();</script>

       3.隐式全局变量

  隐式全局变量:当一个变量声明的时候,没有使用var,那么这个变量就是隐式全局变量

注意!

  通过var创建的全局变量是不可被删除的,而隐式全局变量是可以被删除的。这表明在技术上,隐式全局变量并不是真的全局变量,它们是全局对象的属性,属性是可以通过delete删除的,而变量不能。

var num = 1000;num2 = 200;delete num;delete num2;console.log(typeof num); ?//number 这里即使用delete删除了num,它的类型还是number 无法真正被删除console.log(typeof num2); ?//undefined ?而隐式全局变量很容易被删除了

  变量退出作用域后会被销毁,全局变量关闭网页或浏览器之后才会被销毁/释放

function f1(){ ???var num = 10;}f1();

  这个函数被调用以后,变量所占的空间就被释放了——因为这个函数被用完了

**回调函数粗略的讲解

回调函数:函数作为另一个函数的参数使用

function getSum(x,y){ ???return x + y;}function ff(x,y,fn){ //fn作为一个参数 ???return fn(x,y); //fn是一个函数,并且被调用了}var result = ff(1,5,getSum); ?//给fn传参console.log(result)

函数还可以作为另一个函数的返回值调用

function f1(){ ???return function (){ ???????console.log(123); ???}}var result = f1(); //函数赋值给result//console.log(result) 错误写法 这样只会打印出来f1的函数体result();

little Trick

function aa(){ ???alert(‘aaaa‘); ???return function (){ ???????alert(‘bbbb‘); ???}}alert(aa); alert(aa()); alert(aa()()); 

这三个结果分别是什么?

结果1 函数名打印出来是整个函数体

结果2 弹出aaaa和返回值内的匿名函数,原因是,函数被调用后内部执行了这段代码,然后匿名函数并未被调用,所以返回的是整段匿名函数体

结果3 弹出aaaa,bbbb,和undefined  匿名函数也被调用了,所以弹出了bbbb 为什么会再弹一次undefined呢~?

  

  arguments对象

arguments是一个对象,一个伪数组,可以获取函数参数的个数

**伪数组的概念:可以使用.length,但是不可以调用数组的方法。

function f1(){ ???var sum = 0; ???for(var i =0;i<arguments.length;i++){ ???????sum += arguments[i]; ?//arguments是一个伪数组。它可以指代函数的参数 ???} ???return sum;}var result = f1(10,22,11,33,155);console.log(f1);

js作用域相关知识总结

原文地址:https://www.cnblogs.com/code-klaus/p/8602541.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved