花括号{}中的函数调用

时间:2019-12-16 14:12:12

标签: javascript function curly-braces function-invocation

我正在尝试使用主要提供商之一进行在线聊天。他们建议我嵌入如下代码:

<script type="text/javascript">
  function embedScriptInsideHTMLtags() {
    // responsible code
  }
  {
    embedScriptInsideHTMLtags();
  }
</script>

我的问题是,上下两者之间有什么区别?

<script type="text/javascript">
  function embedScriptInsideHTMLtags() {
    // responsible code
  }  
  embedScriptInsideHTMLtags();
</script>

3 个答案:

答案 0 :(得分:2)

第一个示例使用的是block statement。在这种情况下,两个示例没有区别。通过MDN链接:

  

以var声明或在非严格模式下由函数声明创建的变量具有块范围。块中引入的变量的作用域为包含的函数或脚本,并且设置变量的效果将持续到块本身之外。换句话说,block语句不会引入作用域。

但是在严格模式

  

用let和const声明的标识符确实具有块作用域

  

在严格模式下,从ES2015开始,块内部的功能仅限于该块。在ES2015之前,严格模式下禁止使用块级功能。

答案 1 :(得分:2)

您必须了解访问var外部块与访问let和const外部块之间的区别,一个是不可能的,而var则不能。

您的代码没有任何区别,但

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "*****"
        minSdkVersion 21
        targetSdkVersion 28
        multiDexEnabled true
        versionCode 1
        versionName "1.1"
    }
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation('com.squareup.picasso:picasso:2.71828') {
        exclude group: 'com.android.support'
        exclude module: ['exifinterface', 'support-annotations']
    }
    implementation 'com.github.f0ris.sweetalert:library:1.5.1'
    implementation group: 'net.lingala.zip4j', name: 'zip4j', version: '1.3.1'
    implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'

    implementation 'com.google.firebase:firebase-core:16.0.9'
    implementation 'com.google.firebase:firebase-messaging:18.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.github.chrisbanes:PhotoView:1.2.6'
    implementation 'com.android.support:multidex:1.0.3'
}

repositories {
    mavenCentral()
}

apply plugin: 'com.google.gms.google-services'

在这里您可以从外部或其他脚本访问c,但无法访问b。就您而言,如果您只是调用一个函数,那么它没有任何区别。

答案 2 :(得分:2)

其他人已经回答了您的特定问题,但是我也想指出,W3C现在建议您从JS <script>标记中省略type属性,并且自HTML5规范问世以来就已经存在。该规范鼓励开发人员不要像text/javascript那样在标记中使用冗余的MIME类型。使用脚本标签时,只需写没有任何属性的<script>。您可以在MDN文档中的脚本标签中阅读以下内容:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-type

类似地,在样式表中使用<link>标签(与rel="stylesheet一起使用时,您不再需要使用type="text/css"。由于CSS是网络上唯一可用的样式表类型,样式表的type属性现在是多余的。您可以在以下MDN文档中进一步了解:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#attr-type