JS页面获取 session 值,作用域和闭包学习笔记
作者:hu_beliefs 发布时间:2024-04-22 13:23:06
本文实例讲述了JS页面获取 session 值,作用域和闭包。分享给大家供大家参考,具体如下:
Javascript获取session的值:
var name= "${sessioScope.变量名}";
注意这里面需要使用 "" 把 El 表达式给括起来,否则就取不到数据。
JSP获取session的值:
可以直接${sessionScope.变量名}
,在标签里也是一样。
JSP获取URL的值:
var name = "<%=request.getParameter("name")%>";//谨记:在""中的表达式‘<%= %>'结尾不能加‘;'号,且只能写一句。
var id = ${param.id};//也具有同样的效果,能用在JS类库中的jQuery语法。
在四大作用域中,每一个作用域的取值方法大同小异,方法与技巧都是一以贯之的。
下面是关于作用域和作用链的一些笔记:
作用域(scope):它是指对某一变量和方法具有访问权限的代码空间,在JS中, 作用域是在函数中维护的。表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境。Javascript的作用域只有两种:全局作用域和本地作用域,本地作用域是按照函数来区分的。
变量作用域
在JavaScript中全局变量的作用域比较简单,它的作用域是全局的,在代码的任何地方都是有定义的。然而函数的参数和局部变量只在函数体内有定义。另外局部变量的优先级要高于同名的全局变量,也就是说当局部变量与全局变量重名时,局部变量会覆盖全局变量(如下面例子)。
var num = 1; //声明一个全局变量
function func() {
var num = 2; //声明一个局部变量
return num;
}
console.log(num); //输出:1
console.log(func()); //输出:2
注:声明局部变量时一定要使用var,否则,解释器会将该变量当做全局对象window的属性。关于变量的详细笔记地址:原生javascript 学习之js变量全面了解
函数作用域
在JavaScript中变量的作用域,并非和C、Java等编程语言似得,在变量声明的代码段之外是不可见的,我们通常称为块级作用域,然而在JavaScript中使用的是函数作用域(变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的)。(如下面的例子)
function func() {
console.log(num); //输出:undefined,而非报错,因为变量num在整个函数体内都是有定义的
var num = 1; //声明num 在整个函数体func内都有定义
console.log(num); //输出:1
}
func();//调用func函数
注:JavaScript的函数作用域是指在在函数内声明的所有变量在函数体内始终是可见的,也就是说在函数体内变量声明之前就已经可用了。
作为属性的变量:
当声明一个全局变量的时候,实际上是定义了全局对象window的一个属性。
var num = 1; //声明全变量num
alert(window.num) //输出:1 声明的全局变量实际上就是声明了一个window对象的属性
作用域链
在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。
当一个函数创建后,它实际上保存一个作用域链,并且作用域链会被创建此函数的作用域中可访问的数据对象填充。例如定义下面这样一个函数:
function func() {
var num = 1;
alert(num);
}
func();
在函数func创建时,它的作用域链中会填入一个全局对象,该全局对象包含了所有全局变量,如下图所示(注意:图片只例举了全部变量中的一部分):
函数add的作用域将会在执行时用到。例如执行如下代码:
执行此函数时会创建一个称为"运行期上下文(execution context)"(有人称为运行环境)的内部对象,运行期上下文定义了函数执行时的环境。每个运行期上下文都有自己的作用域链,用于标识符解析,当运行期上下文被创建时,而它的作用域链初始化为当前运行函数的[[Scope]]所包含的对象。
这些值按照它们出现在函数中的顺序被复制到运行期上下文的作用域链中。它们共同组成了一个新的对象,叫"活动对象(activation object)",该对象包含了函数的所有局部变量、命名参数、参数集合以及this,然后此对象会被推入作用域链的前端,当运行期上下文被销毁,活动对象也随之销毁。新的作用域链如下图所示:
闭包学习笔记:
闭包:在js中的我的理解就是把外部的变量引用到函数内部形成一个完全封闭的函数体;当内部函数在定义它的作用域的外部被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被释放,因为闭包需要它们。
所以本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
用途:闭包可以读取函数外部的变量,可以让变量的值始终保持在内存中。
使用闭包要注意:
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
希望本文所述对大家JavaScript程序设计有所帮助。
来源:https://blog.csdn.net/hu_belif/article/details/80177952


猜你喜欢
- mysql-connector-java.jar包的下载教程:1.首先我们打开mysql的官网:https://www.mysql.com/
- pyecharts产生背景Echarts是由百度开源的数据可视化,凭借良好的交互性和精巧的图表设计,得到众多开发者的认可,而python很适
- 一、算法构造1.简单介绍一下knn算法KNN算法,也叫K最近邻算法。功能是分类。算法逻辑非常简单,说直白点就是:先找到跟你最近的k个邻居(假
- MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管
- 那你也许会问及,怎样获取当前系统日期的最大时间值,如yyyy-MM-dd 23:59:59.997。 我们可以使用DATEADD函数,来实现
- 一、需求介绍该需求主要是分析彩票的历史数据,彩票的名称为:1、极速飞艇链接:https://www.dsn665.com/view/jisu
- 在一行内声明CSS,对比下面两个:h2 {font-size:18px; border:1px solid&n
- 汉字转换为UTF-8的一段代码终于找到这段代码了,一个ASP写的中文转UTF-8,大家可以试试function chinese2u
- 一.pyinstaller简介pyinstaller将Python脚本打包成可执行程序,使在没有Python环境的机器上运行最新版是pyin
- 在SQL Server中,为了查询性能的优化,有时我们就需要对数据表通过建立索引的方式,目的主要是根据查询要求,迅速缩小查询范围,避免全表扫
- 前言晚上回家闲来无事,想打开某直播平台,看看小姐姐直播。看着一个个多才多艺的小姐姐,眼花缭乱,好难抉择。究竟看哪个小姐姐直播好呢?今天我们就
- 引言在前面的文章当中我们讨论的是 python3 当中早期的内嵌数据结构字典的实现,在本篇文章当中主要介绍在后续对于字典的内存优化。字典优化
- 今早开机发现,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆
- assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必
- 流程:模拟登录→获取Html页面→正则解析所有符合条件的行→逐一将符合条件的行的所有列存入到CSVData[]临时变量中→写入到CSV文件中
- 前言我们知道python中smtplib模块用于邮件的功能,而django对这个这模块进行封装,使得它使用起来十分简单。django.cor
- 前言:本篇文章基于卷积神经网络CNN,使用PyTorch实现MNIST数据集手写数字识别。一、PyTorch是什么?PyTorch 是一个
- Python实现对变位词的判断,供大家参考,具体内容如下什么是变位词呢?即两个单词都是由相同的字母组成,而各自的字母顺序不同,譬如pytho
- 在JavaScript中我们需要用到trim的地方很多,但是JavaScript又没有独立的trim函数或者方法可以使用,所以我们需要自己写
- 本篇我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数、学习读写文件的方法,并尝试函数式编程