- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
Js中一切都是对象,函数也是一个对象 。
// 创建函数对象
function run(){
console.log("Hello World")
}
// 调用函数
run()
// 打印函数内容(不调用)
console.log(run)
// 函数类型
console.log(typeof run) // function
// 函数表达式(匿名函数)
const fn3 = function () {
console.log("函数表达式")
}
// 调用匿名函数
fn()
// 箭头函数(匿名函数)
const fn4 = () => {
console.log("Hello!")
}
// 调用箭头函数
fn()
形式参数 。
- 在定义函数时,可以在函数中指定数量不等的形式参数(形参)
- 在函数中定义形参,就相当于在函数内部声明了对应的变量但是没有赋值
实际参数 。
- 在调用函数时,可以在函数的()传递数量不等的实参
- 实参会赋值给其对应的形参
- 参数:
1.如果实参和形参数量相同,则对应的实参赋值给对应的形参
2.如果实参多余形参,则多余的实参不会使用
3.如果形参多余实参,则多余的形参为undefined参数的类型 。
- JS中不会检查参数的类型,可以传递任何类型的值作为参数
// 函数表达式和箭头函数同理
function sum(x,y){
console.log(x+y)
}
sum(1,3) // 4
// 如果箭头函数只有一个参数,()可以省略不写
const fn = a => {
console.log(a) // 6
}
fn(6)
// 定义参数时,可以给参数指定默认值
function sum(x,y=100){
return x+y
}
// 默认值,会在没有对应实参时生效
sum(1) // 101
sum(1,2) // 3
在函数中,可以通过return关键字来指定函数的返回值 。
返回值就是函数的执行结果,函数调用完毕返回值便会作为结果返回 。
任何值都可以作为返回值使用(包括对象和函数之类) 。
如果return后不跟任何值,则相当于返回undefined 。
如果不写return,那么函数的返回值依然是undefined 。
return一执行函数立即结束 。
function fn(){
return "hello world"
}
let result = fn()
console.log(result) // hello worldd
// 箭头函数的返回值简写:函数只有一个语句的时候,箭头函数的返回值可以直接写在箭头后,
const sum = (a,b) => a + b
// 如果在箭头函数后直接设置对象字面量返回值的时候,对象字面量需要()括起来
const fn () => ({"name":"li"})
作用域指的是一个变量的可见区域 。
全局作用域 。
全局作用域在网页运行时创建,在网页关闭时消耗 。
所有直接编写到script标签中的代码都位于全局作用域中 。
全局作用域中的变量是全局变量,可以在任意位置访问 。
局部作用域 。
块作用域 。
块作用域是一种局部作用域 。
块作用域在代码块执行时创建,代码块执行完毕它就销毁 。
在块作用域中声明的变量是局部变量,只能在块内部访问,外部无法访问 。
函数作用域 。
函数作用域也是一种局部作用域 。
函数作用域在函数调用时产生,调用结束后销毁 。
函数每次调用都会产生一个全新的函数作用域 。
在函数中定义的变量是局部变量,只能在函数内部访问,外部无法访问 。
当我们使用一个变量时,JS解释器会优先在当前作用域中寻找变量,如果找到了则直接使用,如果没找到,则去上一层作用域中寻找,找到了则使用如果没找到,则继续去上一层寻找,以此类推,如果一直到全局作用域都没找到,则报错变量名 is not defined 。
在浏览器中,浏览器为我们提供了一个window对象,可以直接访问 。
window对象代表的是浏览器窗口,通过该对象可以对浏览器窗口进行各种操作 。
除此之外window对象还负责存储JS中的内置对象和浏览器的宿主对象 。
window对象的属性可以通过window对象访问,也可以直接访问(不适应window.) 。
// 函数就可以认为是window对象的方法
window.console.log("hello world ") // 等价于console.log
window.max = 100 // 向window对象中添加的属性会自动成为全局变量
console.log(max) // 100 等价于 console.log(window.max)
/*
var 用来声明变量,作用和let相同,但是var不具有块作用域
- 在全局中使用var声明的变量,都会作为window对象的属性保存
- 使用function声明的函数,都会作为window的方法保存
- 使用let声明的变量不会存储在window对象中,而特殊存储在一个地方(无法访问)
- var虽然没有块作用域,但有函数作用域
*/
function test(){
a = 10 // 在局部作用域中,如果没有使用var或let声明变量,则变量会自动成为window对象的属性 也就是全局变量
}
使用var声明的变量,它会在所有代码执行前被声明,所以我们可以在变量声明前就访问变量 。
函数的提升,使用函数声明创建的函数,会在其他代码执行前被创建,所以我们可以在函数声明前调用函数 。
let声明的变量实际也会提升,但是在赋值之前解释器禁止对该变量的访问 。
变量和函数的提升同样适用于函数作用域 。
定义形参就相当于在函数中声明了对应的变量,但是没有赋值 。
在开发中应该尽量减少直接在全局作用域中编写代码,要尽量编写的局部作用域,如果使用let声明的变量,可以使用{}来创建块作用域 。
立即执行函数(IIFE),是一个匿名函数,并且只会调用一次,可以使用IIFE创建一个一次性的函数作用域,避免变量冲突的问题 。
(function() {
console.log("立即执行匿名函数")
}());
函数在执行时,JS解析器每次都会传递进一个隐含的参数,这个参数就叫做 this 。
// 函数形式调用时,this指向的是window
function test(){
console.log(this === window) // true
}
// 以方法的形式调用时,this指向的是调用方法的对象
function get_this(){
return this
}
const user = Object()
user.get = get_this
console.log(user.get()) // user对象
console.log(user.get() === user) // true
const user = Object()
user.name = "li"
user.set_name = function (name){
this.name = name
}
user.set_name("q")
console.log(user.name) // q
箭头函数没有自己的this,它的this由外层作用域决定,箭头函数的this和它的调用方式无关 。
<script>
function fn(){
return this
}
const fn1 = ()=>{
return this
}
const obj = {
// 简写方式,fn 等价于 fn:fn,
fn, // obj,以及方法的形式调用
fn1, // window,箭头函数定义在全局作用域
// 简写方式,等价于 say:function (){},
say(){
console.log(this) // obj
function t(){
console.log(this) // Window 以函数方式调用
}
t()
const t2 = () =>{
console.log(this) // obj,箭头函数的this由外层决定,外层的this是obj
}
t2()
}
}
console.log(obj.fn())
console.log(obj.fn1())
obj.say()
</script>
JS运行代码的模式有两种:
正常模式 。
严格模式 。
在严格模式下,语法检查变得严格 。
禁止一些语法、更容易报错、提升了性能 。
在开发中,应该尽量使用严格模式, 。
"use strict" // 全局的严格模式,编写在全局作用域
function fn(){
"use strict" // 函数的严格的模式,编写在函数内部
}
最后此篇关于Js函数的文章就讲到这里了,如果你想了解更多关于Js函数的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在学习构建单页应用程序 (SPA) 所需的所有技术。总而言之,我想将我的应用程序实现为单独的层,其中前端仅使用 API Web 服务(json 通过 socket.io)与后端通信。前端基本上是
当我看到存储在我的数据库中的日期时。 这是 正常 。日期和时间就是这样。 但是当我运行 get 请求来获取数据时。 此格式与存储在数据库 中的格式不同。为什么会发生这种情况? 最佳答案 我认为您可以将
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试使用backbone.js 实现一些代码 和 hogan.js (http://twitter.github.com/hogan.js/) Hogan.js was developed ag
我正在使用 Backbone.js、Node.js 和 Express.js 制作一个 Web 应用程序,并且想要添加用户功能(登录、注销、配置文件、显示内容与该用户相关)。我打算使用 Passpor
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我尝试在 NodeJS 中加载数据,然后将其传递给 ExpressJS 以在浏览器中呈现 d3 图表。 我知道我可以通过这种方式加载数据 - https://github.com/mbostock/q
在 node.js 中,我似乎遇到了相同的 3 个文件名来描述应用程序的主要入口点: 使用 express-generator 包时,会创建一个 app.js 文件作为生成应用的主要入口点。 通过 n
最近,我有机会观看了 john papa 关于构建单页应用程序的精彩类(class)。我会喜欢的。它涉及服务器端和客户端应用程序的方方面面。 我更喜欢客户端。在他的实现过程中,papa先生在客户端有类
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一个图形新手,需要帮助了解各种 javascript 2D 库的功能。 . . 我从 Pixi.js 中得到了什么,而我没有从 Konva 等基于 Canvas 的库中得到什么? 我从 Konva
我正在尝试将一些 LESS 代码(通过 ember-cli-less)构建到 CSS 文件中。 1) https://almsaeedstudio.com/ AdminLTE LESS 文件2) Bo
尝试查看 Express Passport 中所有登录用户的所有 session ,并希望能够查看当前登录的用户。最好和最快的方法是什么? 我在想也许我可以在登录时执行此操作并将用户模型数据库“在线”
我有一个 React 应用程序,但我需要在组件加载完成后运行一些客户端 js。一旦渲染函数完成并加载,运行与 DOM 交互的 js 的最佳方式是什么,例如 $('div').mixItUp() 。对
请告诉我如何使用bodyparser.raw()将文件上传到express.js服务器 客户端 // ... onFilePicked(file) { const url = 'upload/a
我正在尝试从 Grunt 迁移到 Gulp。这个项目在 Grunt 下运行得很好,所以我一定是在 Gulp 中做错了什么。 除脚本外,所有其他任务均有效。我现在厌倦了添加和注释部分。 我不断收到与意外
我正在尝试更改我的网站名称。找不到可以设置标题或应用程序名称的位置。 最佳答案 您可以在 config/ 目录中创建任何文件,例如 config/app.js 包含如下内容: module.expor
经过多年的服务器端 PHP/MySQL 开发,我正在尝试探索用于构建现代 Web 应用程序的新技术。 我正在尝试对所有 JavaScript 内容进行排序,如果我理解得很好,一个有效的解决方案可以是服
我是 Nodejs 的新手。我在 route 目录中有一个 app.js 和一个 index.js。我有一个 app.use(multer....)。我还定义了 app.post('filter-re
我正在使用 angular-seed用于构建我的应用程序的模板。最初,我将所有 JavaScript 代码放入一个文件 main.js。该文件包含我的模块声明、 Controller 、指令、过滤器和
我是一名优秀的程序员,十分优秀!