JS文件是做啥用的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS文件是做啥用的?相关的知识,希望对你有一定的参考价值。
储存javascrip脚本的文件,网页上用的JScript 是一种解释型的、基于对象的脚本语言。尽管与 C++ 这样成熟的面向对象的语言相比,JScript 的功能要弱一些,但对于它的预期用途而言,JScript 的功能已经足够大了。
JScript 不是其他语言的精简版(例如,它只是与 Java 有点模糊而间接的关系),也不是任何事物的简化。不过,它有其局限性。例如,您不能使用该语言来编写独立运行的应用程序,并且没有对读写文件的内置支持。此外,JScript 脚本只能在某个解释器或“宿主”上运行,如 Active Server Pages(ASP)、Internet 浏览器或者 Windows 脚本宿主。
JScript 是一种宽松类型的语言。宽松类型意味着您不必显式定义变量的数据类型。事实上 JScript 更进一步。您无法在JScriot上明确地定义数据类型。此外,在大多数情况下,JScript 将根据需要自动进行转换。例如,如果将一个数值添加到由文本组成的某项(一个字符串),该数值将被转换为文本。 参考技术A JS和HTML都是网页的格式文件,HTML是一种使用标准确无误语言编写的网页,JS是使用高级语言,广义的网页语言也有AJAX、JS、XML、ASP、PHP等
JS只是其中的一种.HTML转JS文件的软件即将普通语言做成的网页,在不改变页面内容等情况下,使用JS语言对内部进行重新组织,重新显示出同样的效果.
JS对网页制作要求高于HTML语言.
渠道是做啥用的?
【中文标题】渠道是做啥用的?【英文标题】:What are channels used for?渠道是做什么用的? 【发布时间】:2017-02-11 02:35:37 【问题描述】:在查看一些 Go 代码时,我发现了以下内容:
ch := make(chan int)
我查阅了一个在线教程,了解 Go Channels 的工作原理:
https://tour.golang.org/concurrency/2
但我觉得这个例子不清楚。
谁能给我一个简单的解释和一个使用频道的例子?
【问题讨论】:
查看这篇文章:How does golang channel works 【参考方案1】:chan 是 Golang 中的一个频道。简而言之,您可以将其视为一个盒子,您可以在其中放置一个项目,然后从另一端拾取它。
无缓冲通道
缓冲通道
这是我为您编写的用于了解频道的小代码。现在更改 goroutine 的顺序并查看输出。每次输出可能不同。
package main
import (
"fmt"
"time"
)
func main()
messages := make(chan int)
go func()
time.Sleep(time.Second * 3)
messages <- 1
()
go func()
time.Sleep(time.Second * 2)
messages <- 2
()
go func()
time.Sleep(time.Second * 1)
messages <- 3
()
go func()
for i := range messages
fmt.Println(i)
()
go func()
time.Sleep(time.Second * 1)
messages <- 4
()
go func()
time.Sleep(time.Second * 1)
messages <- 5
()
time.Sleep(time.Second * 5)
为了更好地理解,请访问此博客,其中在 GUI 中描述了 go 例程和通道。
访问http://divan.github.io/posts/go_concurrency_visualize/
【讨论】:
我喜欢这些插图! 这是一个巨大的帮助!非常感谢 “顺序无关紧要” – 这不是真的。 Go 规范指出:“通道充当先进先出队列。”【参考方案2】:我认为规范对此非常清楚。 Spec: Channel types:
通道为concurrently executing functions 提供一种机制,通过指定元素类型的sending 和receiving 值进行通信。
当您有多个并发执行的 goroutines 时,通道提供了让 goroutines 相互通信的最简单方法。
一种通信方式是通过对两个 goroutine 可见的“共享”变量,但这需要适当的锁定/同步访问。
相反,Go 偏爱频道。引用Effective Go: Share by communicating:
不要通过共享内存进行通信;相反,通过通信共享内存。
因此,例如,您可以创建一个通道(对两个 goroutine 可见),而不是将消息放入共享切片中,并且无需任何外部同步/锁定,一个 goroutine 可以通过通道发送消息(值),而另一个goroutine 可以接收它们。
在任何给定时间只有一个 goroutine 可以访问该值。设计上不会发生数据竞争。
所以事实上,任何数量的 goroutine 都可以在同一个通道上发送值,并且任何数量的 goroutine 都可以从它接收值,仍然没有任何进一步的同步。更多详情请查看相关问题:If I am using channels properly should I need to use mutexes?
频道示例
让我们看一个例子,我们启动 2 个额外的 goroutine 用于并发计算。我们将一个数字传递给第一个,它加 1,并将结果传递到第二个通道。第二个 goroutine 将接收一个数字,将其乘以 10 并将其传递到结果通道:
func AddOne(ch chan<- int, i int)
i++
ch <- i
func MulBy10(ch <-chan int, resch chan<- int)
i := <-ch
i *= 10
resch <- i
这是如何调用/使用它的:
func main()
ch := make(chan int)
resch := make(chan int)
go AddOne(ch, 9)
go MulBy10(ch, resch)
result := <-resch
fmt.Println("Result:", result)
通过通道进行通信还可以处理 goroutines 之间的等待。在此示例中,这意味着MulBy10()
将等待AddOne()
提供递增的数字,而main()
将在打印结果之前等待MulBy10()
。按预期输出(在Go Playground 上尝试):
Result: 100
语言支持
有许多语言结构可以方便地使用频道,例如:
通道上的for ... range
循环遍历从通道接收到的值,直到通道关闭。
select
语句可用于列出多个通道操作,例如在通道上发送和从通道接收,以及可以在不阻塞的情况下进行的操作将被选中(如果有多个可以继续,则随机选择;如果没有准备好,则会阻塞)。
有一种特殊形式的接收操作符,允许您检查通道是否关闭(除了接收值):v, ok := <-ch
内置的len()
函数告诉排队(未读)的元素数量;构建的cap()
函数返回通道缓冲区容量。
其他用途
有关更实际的示例,请参阅如何使用通道来实现worker pool。类似的用途是从producer to consumer(s) 分配值。
另一个实际例子是实现memory pool using buffered channels。
另一个实际的例子是an elegant implementation of a broker。
通道通常用于超时某些阻塞操作,利用time.After()
返回的通道,该通道在指定的延迟/持续时间后“触发”(“触发”表示将在其上发送一个值)。请参阅此示例进行演示(在Go Playground 上试用):
ch := make(chan int)
select
case i := <-ch:
fmt.Println("Received:", i)
case <-time.After(time.Second):
fmt.Println("Timeout, no value received")
它可用于等待某个值的最大时间量,但如果其他 goroutine 到那时无法提供该值,我们可能会决定做其他事情。
另外一种特殊形式的通信可能只是表示某些操作已完成(实际上并未发送任何“有用”数据)。这种情况可以通过具有任何元素类型的通道来实现,例如chan int
,并在其上发送任何值,例如0
。但由于发送的值不包含任何信息,您可以将其声明为chan struct
。或者更好的是,如果您只需要一次信号,您可以关闭可以在另一侧使用for ... range
拦截的通道,或者从它接收(因为从关闭的通道接收立即进行,产生@ 987654337@ 的元素类型)。还要知道,即使通道可以用于这种信令,也有更好的替代方案:sync.WaitGroup
。
进一步阅读
值得了解通道公理以避免令人惊讶的行为:How does a non initialized channel behave?
The Go Blog: Share Memory By Communicating
The Go Blog: Go Concurrency Patterns: Pipelines and cancellation
The Go Blog: Advanced Go Concurrency Patterns
Ardan labs: The Nature Of Channels In Go
【讨论】:
我喜欢这个答案,尤其是关于使用 time.After(time.Second) 的部分。我不知道可以这样做。【参考方案3】:为了更好地理解 Go 中通道的概念,您可以先了解 Go 例程,然后阅读下面的链接,该链接清楚地解释了 golang 中的通道概念。
https://medium.com/rungo/anatomy-of-channels-in-go-concurrency-in-go-1ec336086adb
请参阅此链接以借助示例详细了解频道。
【讨论】:
欢迎来到 ***! *** 旨在积累好的问题和好的答案。请编辑您的帖子并修复链接。您可以看到 2 人已经为这个问题提供了很好的答案。为什么不做通俗易懂的解释,而不是让人们上网呢?如果您认为您可以提供更好的答案(与现有的 2 个答案相比),请扩展您的答案。【参考方案4】:这个概念与 Unix/Linux 从一开始就存在的东西非常相似:管道。
这些是语言内置的可靠的进程间/线程间通信工具。很方便。
【讨论】:
以上是关于JS文件是做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章
commons-fileupload-1.2.1.jar这个包是做啥用的
.net framework Reference Assemblies Facades 文件夹是做啥用的?